小伙伴儿们,如果觉得文章干货满满,欢迎加入公众号【编程识堂】,更多干货等着你们来哦!
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称(但是后期出现的filebeat(beats中的一种)可以用来替代logstash的数据收集功能,比较轻量级)。市面上也被成为Elastic Stack。
Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。Filebeat的工作方式如下:启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。
Logstash是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。Logstash能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用Grok从非结构化数据中派生出结构,从IP地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。
Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎,是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论您是结构化文本还是非结构化文本,数字数据或地理空间数据,Elasticsearch都能以支持快速搜索的方式有效地对其进行存储和索引。
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。并且可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以汇总、分析和搜索重要数据日志。还可以让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。
与平常普通的ELK相比,Filebeat结合Logstash带来的优势:
docker pull elasticsearch:7.1.1
docker pull kibana:7.1.1
docker pull logstash:7.1.1
docker pull elastic/filebeat:7.1.1
docker network create somenetwork
docker run -d
--name 【创建的容器名】
--net 【网络名】
-p 【主机(宿主)端口】:【容器端口】
【本地镜像仓库下载的镜像名-REPOSITORY】:【需要的版本号-TAG】
docker run -d \
--name elasticsearch-7.17.0 \
-p 9200:9200 -p 9300:9300 \
--net somenetwork \
-e "discovery.type=single-node" \
elasticsearch:7.17.0
参数说明
–net somenetwork :加入一个名为 somenetwork 的网络中,同一个网络中可以相互访问
-e “discovery.type=single-node”:单点模式启动
-p 9200:9200 -p 9300:9300 :端口映射配置
es十分耗内存:通过docker stats 查看发现资源消耗很大
我们可以通过增加内存限制来控制
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms4g -Xmx4g" -e "discovery.type=single-node" \
-v /usr/local/elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.1.1
通过curl 127.0.0.1:9200 测试elasticsearch是否安装成功
docker images|grep 'kibana'
# 启动容器
docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:7.1.1
# 进入容器 查看配置文件
docker exec -it 67f17df6ca3e /bin/bash
# 将容器里的配置文件cp 到宿主机上 用于修改 并挂在
docker cp kibana:/usr/share/kibana/config/kibana.yml /usr/local/elk/kibana/kibana.yml
vim kibana.yml
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.5.217:9200" ] # 部署的es 192.168.5.217
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN" # 汉化
# 重新启动kibana 容器
docker stop kibana
docker rm /kibana
docker run -d --name kibana --net somenetwork -p 5601:5601 \
-v /usr/local/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.1.1
#查看 kibana 容器启动日志
docker logs -t -f kibana
#访问
192.168.5.217:5601
docker images|grep 'logstash'
docker run -it -d -p 5044:5044 --name logstash --net somenetwork logstash:7.1.1
docker exec -it logstash /bin/bash
docker cp logstash:/usr/share/logstash/config /usr/local/elk/logstash/config
cd usr/local/elk/
mkdir conf.d
cd conf.d
vim my.conf
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["192.168.5.217:9200"]
index => "gs-%{+YYYY.MM}"
}
}
cd config/
vim logstash.yml
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.5.217:9200" ]
#允许监控
xpack.monitoring.enabled: true
##目录为挂载目录,启动命令指定的
path.config: /usr/share/logstash/conf.d/my.conf
# 指定日志目录
path.logs: /data/log
# 启动logstash
docker run -it -d -p 5044:5044 --name logstash --net somenetwork \
-v /usr/local/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /usr/local/elk/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.1.1
docker run -d -u root --name filebeat --net somenetwork elastic/filebeat:7.1.1
docker images|grep 'filebeat'
#进入容器 查看配置
docker exec -it filebeat /bin/bash
#退出容器 将容器里的配置文件cp 到宿主机上 用于修改 并挂在
docker cp filebeat:/usr/share/filebeat/filebeat.yml /usr/local/elk/filebeat/filebeat.yml
filebeat.yml
# 定义info1应用的input类型、以及存放的具体路径
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/log/om/omweb/*.log
fields:
index: gs-om-web
- type: log
enabled: true
paths:
- /data/log/om/tvapi/*.log
fields:
index: gs-om-tvapi
- type: log
enabled: true
paths:
- /data/log/om/mqServer/*.log
fields:
index: gs-om-mqServer
- type: log
enabled: true
paths:
- /data/log/om/provider/*.log
fields:
index: gs-om-provider
- type: log
enabled: true
paths:
- /data/log/om/family/*.log
fields:
index: gs-om-family
- type: log
enabled: true
paths:
- /data/log/om/omdeviceapi/*.log
fields:
index: gs-om-deviceapi
- type: log
enabled: true
paths:
- /data/log/user/web/*.log
fields:
index: gs-user-web
- type: log
enabled: true
paths:
- /data/log/user/wechat/*.log
fields:
index: gs-user-wechat
#============================= Filebeat modules ===============================
filebeat.config.modules:
# Glob pattern for configuration loading
path: ${path.config}/modules.d/*.yml
# Set to true to enable config reloading
reload.enabled: true
# ============================== logstash =====================================
output.logstash:
hosts: ["192.168.5.217:5044"] #192.168.5.217为logstash安装的服务器ip
enabled: true
#============================== Kibana =====================================
setup.kibana:
host: "192.168.5.217:5601"
#============================== elasticsearch =====================================
#output.elasticsearch:
# hosts: ["192.168.226.132:9200"]
# enabled: true
#启动 filebeat
docker run -d -u root --name filebeat --net somenetwork \
-v /data/log:/data/log:rw \
-v /usr/local/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro elastic/filebeat:7.1.1
# 查看filebeat 日志
docker logs -t -f filebeat