文章目录
Logstash为服务端数据处理管道,可以从多各渠道采集数据并进行处理,然后输出到指定的存储库中;Elasticsearch为一个大数据存取、分析的全文搜索引擎;Kibana主要用来进行数据的可视化展示,与Grafana功能相同;借助于ELK可以实现数据通过Logstash进行筛选处理;然后将数据存储到ES中,支持海量数据的全文搜索;最后在Kibana中对数据进行可视化展示这样一条龙的处理。本文将使用Docker部署ELK服务,以及简单日志分析服务的构建。
1、ElasticSearch服务
首先获取ES的镜像文件,这里以version:7.12.0为例:
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.12.0
然后启动一个单节点(single-node)的ES集群:
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.12.0
# 由于ES服务较消耗内存,因此启动时可以进行内存大小设置
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m"docker.elastic.co/elasticsearch/elasticsearch:7.12.0
# 9200端口主要用于外部通讯
# 9300端口用于ES集群之间通信
也可以使用docker-compose来构建多节点的集群以及更详细的ES配置,可以参考:ES服务Docker部署
进行连接测试,在浏览器中输入ES地址,显示如下信息说明已经配置完成:
2、Kibana服务
2.1、Kibana服务构建
镜像获取,以version:7.12.0为例:
docker pull docker.elastic.co/kibana/kibana:7.12.0
构建Kibana服务,并与ES服务建立连接:
ocker run -d --name kibana -e ELASTICSEARCH_URL=[es地址,如:http://localhost:9200] -p 5601:5601 docker.elastic.co/kibana/kibana:7.12.0
更多的相关配置可以参考官网:Kibana服务Docker部署
2.2、Kibana服务测试
测试Kibana服务与ES服务的连接,点击Kibana客户端上的Dev tools
,进入如下页面:
可以在Console
中进行ES相关语句的操作。
3、Logstash服务
3.1、Logstash服务搭建
先来获取镜像,同样的以version:7.12.0为例:
docker pull docker.elastic.co/logstash/logstash:7.12.0
接下来需要进行Logstash配置文件的构建,Logstash的配置文件主要分为两种 Settings and Pipeline Configuration
,Pipeline Configuration
类型配置文件主要是对Pipeline的input
、filter
、output
进行配置,大致结构如下:
input {
...
}
filter {
...
}
output {
...
}
这里可以按照上述格式进行解析日志文件Pipeline的配置(logstash.conf):
input {
file { # 数据输入的类型,从文件中输入
path=>"/data/api.log" # 文件所在位置,docker容器中的目录
start_position => "beginning" # 从文件什么地方开始读取,有两个值可以选:end——文件末尾;begining——从文件首行开始
}
}
output {
elasticsearch{ # 输出数据到es中
hosts=>["172.22.34.1:9200"] # es的位置,这里使用es服务宿主机ip,使用localhost时访问不过去
index => "es-message-%{+YYYY.MM.dd}" # 数据存储到es中时,设置的index名称,格式为`es-message-年.月.日`
}
stdout { codec => json } # 设置数据的输出格式
}
更多的配置可以参考官网文档:Logstash配置文件Pipleline configuration
接下来进行Settings Configuration
类型配置文件的配置,该类型配置文件主要用来控制Logstash的执行的,例如设置Pipleline配置的位置,日志记录选项等其他设置,具体的配置项可以参考:Logstash中的settings documentation,这里介绍下本次构建Logstash服务时用到的配置:
pipeline:
id: main # 配置pipeline的id
path:
config: /usr/share/logstash/conf.d/*.conf # 这里是管道的配置文件的地址
logs: /var/log/logstash # logstash日志存储的目录
config:
reload:
automatic: true # 定期检查配置是否已更改,并在更改后重新加载配置
interval: 5s # Logstash多长时间检查一次配置文件中的更改。必须使用单位限定符(s)
完成以上两项之后就可以构建Logstash容器,然后启动服务了,使用如下命令:
docker run -it -d -p 9600:9600 -p 5044:5044 --name logstash
-v /root/Elastic/Logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml # 挂载logstash基本配置
-v /root/Elastic/Logstash/pipline/:/usr/share/logstash/conf.d/ # 挂载管道信息配置
-v /root/Elastic/Logstash/data/api.log:/data/api.log # 挂载日志文件地址,要将宿主机的日志数据,与容器内的挂载
docker.elastic.co/logstash/logstash:7.12.0
完成以上的内容就实现了Logstash服务的构建以及与ES服务的连接。
3.2、Logstash与ES连接测试
首先在宿主机目录/root/Elastic/Logstash/data/
下建立文件api.log
,内容如下所示:
测试数据1;
测试数据2;
测试数据3;
测试数据4;
测试数据5;
测试数据6;
然后在Kibana中查看日志内容是否已经解析到ES中,在Kibana的Dev tools
中进行如下操作:
即可看到api.log中的日志信息已经同步解析到ES中。
注意:
使用ELK时,需要使用的版本一致!