ELKF——从零开始搭建部署ELKF日志系统-创新互联
日志系统是一个很重要的系统,一个架构良好的日志系统,可以帮助开发者更清楚的了解服务器的状态和系统安全状况,从而保证服务器的稳定运行。目前,在大型的后端架构中,一个标准的数据采集方案通常被称为ELK,即ElasticSearch、Logstash和Kibana。为了更轻量级的收集数据,还引用了Filebeat。
所以,我们此次选择Elasticsearch + Logstash + filebeat + Kibana架构来进行演示。
Elasticsearch:分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点,可用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 使用Java 基于 Lucene 开发,是现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建的。
Logstash:数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Kibana:可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。
- 安装Elasticsearch
docker拉取镜像,使用7.10.2版本。
docker pull elasticsearch:7.10.2
创建挂载目录,并给创建的文件夹授权。
mkdir -p /worker/elk/elasticsearch #文件夹赋权 sudo chown -R 777 /worker/elk/elasticsearch #这里注意:如果777权限不够,就给1000 : 1000权限
执行docker run脚本
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name es 镜像ID
拷贝elasticsearch容器内部的配置到挂载目录
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /worker/elk/elasticsearch/ docker cp es:/usr/share/elasticsearch/data /worker/elk/elasticsearch/
修改elasticsearch.yml
cluster.name: "es-master" network.host: 0.0.0.0 # 0.0.0.0可表示监听所有IP http.host: 0.0.0.0 # 跨越请求 http.cors.enabled: true http.cors.allow-origin: "*"
删除容器
docker rm -f es
再次执行dokcer脚本启动elasticsearch,并设置挂载目录
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name es \ --restart=always \ -e ES_JAVA_OPTS="-Xms128m -Xmx512m" \ -h elasticsearch \ -v /worker/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /worker/elk/elasticsearch/data:/usr/share/elasticsearch/data \ -e LANG=C.UTF-8 \ -e LC_ALL=C.UTF-8 \ 镜像ID 参数说明: -p 9200:9200:将容器的9200端口映射到宿主机9200端口 -p 9300:9300:将容器的9300端口映射到宿主机9300端口,目的是集群互相通信 --restart=always:docker重启自动启动 -e "discovery.type=single-node":单例模式 -e ES_JAVA_OPTS="-Xms128m -Xmx512m":配置内存大小,最小/大内存 -v 挂载目录
- Kibana
docker拉去镜像,使用7.10.2版本
docker pull kibana:7.10.2
创建挂载目录,并给创建的文件夹授权(与elasticsearch的创建过程类似)。
mkdir -p /worker/elk/kibana #文件夹赋权 sudo chown -R 777 /worker/elk/kibana
执行docker run脚本
sudo docker run -d --name kibana -p 5601:5601 镜像ID
拷贝kibana容器内部的配置到挂载目录
docker cp kibana:/usr/share/kibana/config /worker/elk/kibana/ docker cp kibana:/usr/share/kibana/data /worker/elk/kibana/
修改kibana.yml配置文件
server.name: kibana server.host: "0.0.0.0" elasticsearch.hosts: [ "http://elasticsearch:9200" ] # 显示登陆页面 monitoring.ui.container.elasticsearch.enabled: true # 语言 i18n.locale: "zh-CN"
删除容器
docker rm -f kibana
再次执行dokcer脚本启动kibana,并设置挂载目录
docker run -d --name kibana -p 5601:5601 \ --restart=always \ --link es:elasticsearch \ -h kibana \ -v /worker/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \ -v /worker/elk/kibana/data:/usr/share/kibana/data \ 镜像ID 参数说明: --link:使用–link参数时,docker会自动在共享两个容器的变量。访问的时候,不再是通过IP的方式来访问,而是通过容器名来访问。上面访问es容器,可以直接elasticsearch:9200可以访问到es容器。
- Logstash
docker拉去镜像,使用7.10.2版本
docker pull logstash:7.10.2
创建挂载目录,并给创建的文件夹授权。
mkdir -p /worker/elk/logstash #文件夹赋权 sudo chown -R 777 /worker/elk/logstash
创建容器
docker run -p 4560:4560 --name logstash -d 镜像ID
拷贝logstash容器内部的配置到挂载目录
docker container cp logstash:/usr/share/logstash/config /worker/elk/logstash docker container cp logstash:/usr/share/logstash/pipeline /worker/elk/logstash docker container cp logstash:/usr/share/logstash/data /worker/elk/logstash
修改logstash.yml的文件的默认配置,配置文件的路径(/worker/elk/logstash/config)
http.host: "0.0.0.0" #允许监控 xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
修改logstash.conf的文件配置,配置文件的路径(/worker/elk/logstash/pipeline),根据具体情况配置
# 监听5044端口作为输入源 input { beats { port =>5044 } } # 过滤 filter { grok { match =>{ "message" =>"%{COMBINEDAPACHELOG}" } } date { match =>[ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } # 输出到es output { elasticsearch { hosts =>["elasticsearch:9200"] # 索引名称,这里获取filebeat设置的参数 index =>"%{[fields][service]}-%{+YYYY.MM.dd}" } stdout { codec =>rubydebug } }
停止并删除容器
docker rm -f logstash
重新启动容器并设置挂载目录
docker run -d \ --name logstash \ -p 5044:5044 \ --restart=always \ -h logstash \ --link es:elasticsearch \ -v /worker/elk/logstash/config:/usr/share/logstash/config \ -v /worker/elk/logstash/pipeline:/usr/share/logstash/pipeline \ 镜像ID
进入logstash容器,安装插件
bin/logstash-plugin install logstash-codec-json_lines
- filebeat
docker pull docker.elastic.co/beats/filebeat:7.10.2
然后,执行docker启动脚本。
docker run -d --name filebeat -p 9000:9000 镜像ID
接着,创建filebeat挂载目录,并给创建的文件授权。
mkdir -p /worker/elk/filebeat sudo chown -R 777 /worker/elk/filebeat # 将容器内的文件复制到主机上。 docker cp filebeat:/usr/share/filebeat/filebeat.yml /worker/elk/filebeat
修改配置文件filebeat.yml
filebeat.config: modules: path: ${path.config}/modules.d/*.yml reload.enabled: false processors: - add_cloud_metadata: ~ - add_docker_metadata: ~ filebeat.inputs: - type: tcp enabled: true # 设置参数 fields: service: estate max_message_size: 10MiB host: "0.0.0.0:9000" # 输出到logstash output.logstash: hosts: ["logstash:5044"]
删除容器
docker rm -f filebeat
接着,修改docker启动脚本,增加-v挂载目录。
docker run -d \ --name filebeat \ -p 9000:9000 \ -h filebeat \ -v /worker/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \ --restart=always \ --link logstash:logstash \ -e TZ=Asia/Shanghai \ -e output.logstash.hosts=["logstash:5044"] \ 镜像ID
- 连接filebeat
springboot项目连接filebeat做日志输出,地址为192.168.189.128:9000 (根据自己ip来),具体可以参考其他文章。
- 配置kibana
进入kibana页面,地址为http://192.168.189.128:5601/ (根据自己ip来)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9075b03633ad43b48ae15a4dbeb5be6f.jpeg#pic_center输入logstash配置的索引index名称,点击下一步。
看到已经有日志输出。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站栏目:ELKF——从零开始搭建部署ELKF日志系统-创新互联
本文链接:http://hbruida.cn/article/igsdj.html