最近搭建基于 Spring Cloud 的微服务框架,日志系统当然最佳选择就是 ELK。看着 MAC 那紧巴巴的配置,又不想热情退去而留下一堆软件,果断选择 Docker 安装来节省那可怜的资源。当然这只是鹏哥的一点点小心思。
为什么使用 Docker 这里就不在赘述了,相信就算现在猪肉贵你吃不起,但是新闻里至少有猪的图片你应该看过吧。这篇文章的主旨是搭建一个 ELK(主要是Elasticsearch + Kibana,Logstash 会在 Spring Cloud 继承 ELK 的文章中介绍)。
所以看完这篇文章你将了解:
- Docker 的常见命令,可以收藏的
- Docker 安装 Elasticsearch
- Docker 安装 Kibana
最近搭建 Spring Cloud 的日志系统,练手当然最佳选择就是 ELK。看着 MAC 那紧巴巴的配置,果断选择 Docker 安装来节省那可怜的资源。
为什么使用 docker 这里就不在赘述了,相信就算现在猪肉贵你没吃过,但是新闻里至少有猪的图片你应该看过吧。这篇文章的主旨是搭建一个 ELK(主要是 elasticsearch + kibana,logstash 会在 spring cloud 继承 ELK 的文章中介绍),Docker 充其量是一个工具,但是磨刀不误砍柴工,我们还是先来看看安装 ELK 过程中用到的 Docker 命令吧。
Docker 常见命令 search 命令下载镜像之前我们应该先搜索到镜像,搜索镜像的命令:docker search [OPTIONS] TERM
OPTIONS 说明:
- --automated :只列出 automated build 类型的镜像;
- --no-trunc :显示完整的镜像描述;
- -s :列出收藏数不小于指定值的镜像。
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
- stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
- AUTOMATED: 自动构建。
搜索之后找到对应的镜像,然后我们调用 pull 命令将镜像拉到本地:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS 说明:
- -a :拉取所有 tagged 镜像
- --disable-content-trust :忽略镜像的校验,默认开启
镜像下来之后,我们的最终目的是要运行这个镜像,运行镜像需要用到 run 命令。docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS 说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器 ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的高端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- --name="nginx-lb": 为容器指定一个名称;
- --dns 8.8.8.8: 指定容器使用的 DNS 服务器,默认和宿主一致;
- --dns-search example.com: 指定容器 DNS 搜索域名,默认和宿主一致;
- -h "mars": 指定容器的 hostname;
- -e username="ritchie": 设置环境变量;
- --env-file=[]: 从指定文件读入环境变量;
- --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定 CPU 运行;
- -m :设置容器使用内存最大值;
- --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- --link=[]: 添加链接到另一个容器;
- --expose=[]: 开放一个端口或一组端口;
- --volume , -v: 绑定一个卷
镜像启动之后,会在容器里运行,那我们如何查看运行的情况呢?logs 命令会帮我们输出运行的日志。
docker logs [OPTIONS] CONTAINER
OPTIONS 说明:
- -f : 跟踪日志输出
- --since :显示某个开始时间的所有日志
- -t : 显示时间戳
- --tail :仅列出最新 N 条容器日志
镜像启动之后,会在有一个容器,如果我们想查看当前容器的信息,需要执行 ps 命令。
docker ps [OPTIONS]
OPTIONS 说明:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- --format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的 n 个容器。
- --no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
输出详情介绍:
- CONTAINER ID: 容器 ID。
- IMAGE: 使用的镜像。
- COMMAND: 启动容器时运行的命令。
- CREATED: 容器的创建时间。
- STATUS: 容器状态。状态有 7 种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
- PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
- NAMES: 自动分配的容器名称。
有时候我们需要进入到镜像的内部,exec 命令会帮助我们在容器内部执行命令。docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS 说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持 STDIN 打开
- -t :分配一个伪终端
docker start :启动一个或多个已经被停止的容器docker stop :停止一个运行中的容器docker restart :重启容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
如果我们认为这个容器已经没有存在的意义了,我们可以执行 rm 命令删除这个容器。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS 说明:
- -f :通过 SIGKILL 信号强制删除一个运行中的容器。
- -l :移除容器间的网络连接,而非容器本身。
- -v :删除与容器关联的卷。
如果我们长期不使用,就会忘记我们之前拉取过那些,images 命令会列出我们本地所有的镜像。docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS 说明:
- -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- --digests :显示镜像的摘要信息;
- -f :显示满足条件的镜像;
- --format :指定返回值的模板文件;
- --no-trunc :显示完整的镜像信息;
- -q :只显示镜像 ID。
本地镜像如果不在需要,放在本地就会占用宝贵的存储资源,鹏哥就非常在意这个,所以我会定期使用 rmi 命令清理本地不用的镜像。
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明:
- -f :强制删除;
- --no-prune :不移除该镜像的过程镜像,默认移除;
介绍完我们会用到的 docker 命令之后,安装 ELK 就是水到渠成的事了,下边我们来安装 ELK。
Docker 安装 elasticsearch在 elastic 6.0 版本之后 elastic 官方开始维护自己的 Docker 镜像包,所以如果我们要搭建 elk 的花,官方的包当然是首选,我们选用最新的 7.5.1 版本来搭建。首先我们执行 pull 命令 将镜像拉到本地:docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1
执行完 pull 命令之后,我们起一个容器,为了后边方便 kibana 链接,这里最好指定一个名称:docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:7.5.1
启动完之后在浏览器输入 http://localhost:9200 ,如果能看到如下的输出,说明我们已经安装启动成功。
安装完 elasticsearch ,就像安装了一个命令行的操作系统,如果我们想直观的查看日志情况,我们需要一个 GUI,kibana 就是 elastic 的 GUI,这也是 elastic 的核心竞争力。
同样的,我们先执行 pull 命令拉下来 7.5.1 版本的 kibana,版本的选择有一定的要求:我们不能选高于 elasticsearch 的版本,同时又必须和 elasticsearch 保持同样的大版本。当然简单起见我们选择同样的版本号是不会有问题的。docker pull docker.elastic.co/kibana/kibana:7.5.1
拉完镜像之后,起一个容器,这里说明一下 ELASTICSEARCH_URL 这个参数,鹏哥试下来似乎是没有作用的,可能是鹏哥不知道怎么用,如果有网友知道,也请帮忙告知一下,不胜感激。
docker run -d -p 5601:5601 --link elasticsearch -e ELASTICSEARCH_URL=http://elasticsearch:9200 --name kibana docker.elastic.co/kibana/kibana:7.5.1
我们在起 kibana 的时候需要知道 elasticsearch 容器的名称,ELASTICSEARCH_URL 的规则可以是 http://[elasticsearch 容器名称]:9200,也可以是 elasticsearch 的无理 IP 地址,但是不能是 localhost, 因为这样会解析到 kibana 容器内部,导致无法连接 elasticsearch 服务器。
这里我们设置的 elasticsearch 容器名称跟 kibana 默认的 名称重合了,所以我们不用修改任何配置,这个时候打开浏览器 输入 http://localhost:5601 就能看到 kibana 的欢迎页面。但是如果我们没有设置 elasticsearch 的容器名称或者设置的其他的字符串,那么需要我们修改 kibana.yml 来指定这个名称。
首先使用 exec 进入容器:
docker exec -it [你的容器 id] /bin/bash
然后使用 vim 打开 kibana.yml
vi /usr/share/kibana/config/kibana.yml
修改完之后输入 exit 推出当前的容器。然后使用 restart 命令,重启容器,就能看到效果了。
kibana 默认是英文界面,如果需要支持中文,可以按照上边的方式修改 kibana.yml ,在最后一行追加:i18n.locale: zh-CN
重启 kibana ,刷新浏览器就能看到效果了。
按照这套教程,你可以无脑的安装 ELK 而不用修改任何东西,也就是这是最简单的 demo,如果你需要更高级别的配置,可以持续关注鹏哥的文章,因为鹏哥也在开始学习 elastic 的东西。这套教程就是鹏哥花了两天的时间从零摸索出来的。虽然意义不大,但是没办法,鹏哥就是这么爱折腾。
阅读全文: http://gitbook.cn/gitchat/activity/5e1f32a0d54f653320b268ca
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。