ELK Stack企业日志平台介绍
ELK是由 Elasticsearch(搜索引擎)、Logstash(日志收集)和Kibana(可视化平台) 三部分组件组成。
本文中还引入了filebeat工具,相对于logstash,filebeat的资源占用率更低。
ELK Stack企业日志平台安装部署
本文采用的ELk镜像为 https://hub.docker.com/ 提供的官方镜像,也有很多非官方的集成好的elk镜像,部署方式大同小异,大家可以自行研究。部署时尽量采用相同版本的镜像,已避免不必要的报错。
一、Docker 安装 Elasticsearch
官网镜像地址:https://hub.docker.com/_/elasticsearch
docker pull elasticsearch:7.1.1
[root@k8s-node3 ~]# docker images | grep elasticsearch elasticsearch 7.1.1 b0e9f9f047e6 6 months ago 894MB
#创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana)
docker network create elk
#查看docker网络
[root@k8s-node3 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 87080f2eb5a4 bridge bridge local 6835f763c78c elk bridge local 31359fc68c80 host host local 3890144a8de2 none null local
#运行 elasticsearch
docker run -d --name elasticsearch --net elk -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.1.1
#如果提示docker WARNING: IPv4 forwarding is disabled.
解决方法:
#在宿主机上面执行:
echo “net.ipv4.ip_forward=1” >> /usr/lib/sysctl.d/00-system.conf
#重启docker服务
systemctl restart docker
查看容器状态
[root@k8s-node3 ~]# docker ps | grep elasticsearch ab49020cb285 elasticsearch:7.1.1 "/usr/local/bin/dock…" 20 hours ago Up 19 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
#检测 elasticsearch 是否启动成功
[root@k8s-node3 ~]# curl 127.0.0.1:9200 { "name" : "ab49020cb285", "cluster_name" : "docker-cluster", "cluster_uuid" : "iATljVk3S7SDk1tp7p8HPg", "version" : { "number" : "7.1.1", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "7a013de", "build_date" : "2019-05-23T14:04:00.380842Z", "build_snapshot" : false, "lucene_version" : "8.0.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
Elasticsearch 安装启动完成
二、Docker 安装 Kibana
官网镜像地址:https://hub.docker.com/_/kibana
使用和 elasticsearch 相同版本镜像 7.1.1 (不一样可能会出现问题)
下载镜像 查看镜像
docker pull kibana:7.1.1
[root@k8s-node3 ~]# docker images | grep kibana kibana 7.1.1 67f17df6ca3e 6 months ago 746MB
注意:在本例中,Kibana使用默认配置,并希望连接到正在运行的Elasticsearch实例http://localhost:9200
运行 Kibana
docker run -d --name kibana --net elk -p 5601:5601 kibana:7.1.1
查看容器启动状态
[root@k8s-node3 ~]# docker ps | grep kibana c25a6db6d517 kibana:7.1.1 "/usr/local/bin/kiba…" 20 hours ago Up 20 hours 0.0.0.0:5601->5601/tcp kibana
访问 http://ip:5601 (启动可能会较慢,如失败等几秒再尝试刷新一下)
Kibana 安装启动完成
三、Docker 安装 Logstash
官网镜像地址:https://hub.docker.com/_/logstash
使用同版本镜像 7.1.1
下载镜像 查看镜像
docker pull logstash:7.1.1
[root@k8s-node3 ~]# docker images | grep logstash logstash 7.1.1 b0cb1543380d 6 months ago 847MB
我在工作目录建立一个 docker 目录 并在里面创建了 logstash 目录,用来存放所有配置
[root@k8s-node3 logstash]# pwd /root/logstash [root@k8s-node3 logstash]# ls conf.d logstash.yml
logstash.yml (文件内容)
[root@k8s-node3 logstash]# cat logstash.yml path.config: /usr/share/logstash/conf.d/*.conf path.logs: /var/log/logstash
下面是我用来测试的收集日志的配置文件
[root@k8s-node3 conf.d]# pwd /root/logstash/conf.d [root@k8s-node3 conf.d]# ls test.conf [root@k8s-node3 conf.d]# cat test.conf input { file { path => ["/usr/share/logstash/log/test.info.log"] type => "test-info" start_position => "beginning" } file { path => ["/usr/share/logstash/log/test.error.log"] type => "test-error" start_position => "beginning" } } filter { date { match => ["timestamp","yyyy-MM-dd HH:mm:ss"] remove_field => "timestamp" } } output { if [type] == "test-info" { elasticsearch { hosts => ["elasticsearch:9200"] index => "certification-info-%{+YYYY.MM.dd}" } } if [type] == "test-error" { elasticsearch { hosts => ["elasticsearch:9200"] index => "certification-error-%{+YYYY.MM.dd}" } } }
启动 Logstash
记得映射上面两个目录 {path}
docker run -it -d -p 5044:5044 --name logstash --net elk -v /root/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.1.1
查看容器运行状态
[root@k8s-node3 conf.d]# docker ps | grep logstash fbc97c3ec892 logstash:7.1.1 "/usr/local/bin/dock…" 20 hours ago Up 17 hours 0.0.0.0:5044->5044/tcp, 9600/tcp logstash
启动成功
此时,登录kibana平台,可以看到收集的数据
ps:这个收集的日志,是我进入到/usr/share/logstash/log/目录下创建的test.info.log和test.erro.log。若要收集宿主机的某个日志,只要启动容器时将宿主机上的日志路径映射到/usr/share/logstash/log/目录即可。/usr/share/logstash/log/目录并非固定,而是根据/root/logstash/conf.d/*.conf的配置文件内容而定。
四、Docker 安装 Filebeat
官网镜像地址:https://hub.docker.com/_/filebeat
使用同版本镜像 7.1.1
下载镜像 查看镜像
docker pull store/elastic/filebeat:7.1.1
[root@k8s-node3 conf.d]# docker images |grep filebeat store/elastic/filebeat 7.1.1 0bd69a03e199 6 months ago 288MB
下载默认官方配置文件 (暂时在当前目录创建一个 filebeat 目录 用来放 filebeat 配置文件)
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml
打开配置文件
vim filebeat.docker.yml
增加下面的配置 (收集 .log 数据 把数据发送到当前网络5044端口 (logstash 端口) )
这个地方的 .log 要保证有几条测试的内容
[root@k8s-node3 ~]# cat filebeat.docker.yml #filebeat.config: #modules: #path: ${path.config}/modules.d/*.yml #reload.enabled: false #filebeat.autodiscover: #providers: #- type: docker #hints.enabled: true #processors: #- add_cloud_metadata: ~ #output.elasticsearch: #hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}' #username: '${ELASTICSEARCH_USERNAME:}' #password: '${ELASTICSEARCH_PASSWORD:}' filebeat.inputs: - type: log enabled: true paths: - /var/log/test911/*.log output.logstash: hosts: ['192.168.31.193:5044']
运行Filebeat
docker run --name filebeat --user=root -d --volume="/var/log/test911:/var/log/test911/" --volume="/root/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" store/elastic/filebeat:7.1.1
查看容器启动状态
[root@k8s-node3 ~]# docker ps | grep filebeat 40208dfe0dfe store/elastic/filebeat:7.1.1 "/usr/local/bin/dock…" 3 hours ago Up 8 seconds
启动成功
使用filebeat收集日志,需要对logstash的配置文件进行修改,修改如下:
[root@k8s-node3 conf.d]# pwd /root/logstash/conf.d [root@k8s-node3 conf.d]# ls test.conf [root@k8s-node3 conf.d]# cat test.conf input { beats { port => 5044 codec => "json" } } output { elasticsearch { hosts => ["elasticsearch:9200"] } stdout { codec => rubydebug } }
现在去 Kibana 查看数据,已经有数据了
若想要收集其他服务器上的日志,只需要在其他服务上部署filebeat即可,前提是要保证网络互通,要能访问logstash的5044端口。
大家需要按照自己的需求修改相应的配置!