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
启动成功
使用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端口。
大家需要按照自己的需求修改相应的配置!