前言 因为最近需要部署日志收集系统,而网上部署elk的方式多种多样,参差不齐,在尝试后总结出一种快速有效的部署方法
ELK简介 ELK Stack是软件集合Elasticsearch
、Logstash
、Kibana
的简称,由这三个软件及其相关的组件可以打造大规模日志实时处理系统
Elasticsearch 是一个基于 Lucene 的、支持全文索引的分布式存储和索引引擎,主要负责将日志索引并存储起来,方便业务方检索查询
Logstash 是一个日志收集、过滤、转发的中间件 ,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理
Kibana 是一个可视化工具,主要负责查询 Elasticsearch 的数据并以可视化的方式展现给业务方 ,比如各类饼图、直方图、区域图等
Docker部署 最好使用4G内存 和40G磁盘 的服务器,是在没有可以暂时使用虚拟机进行实验
创建容器之间的通信网络
docker network create docker_elk_test
拉取镜像
1 2 3 docker pull docker.elastic.co/elasticsearch/elasticsearch:7 .3 .0 docker pull docker.elastic.co/kibana/kibana:7 .3 .0 docker pull docker.elastic.co/logstash/logstash:7 .3 .0
部署elasticsearch 1 2 3 4 创建配置文件,文件位置可有自己选择 mkdir /usr/elk/elastic cd /usr/elk/elastic vim elasticsearch.yml
1 2 3 4 5 6 7 cluster.name: "docker-cluster"# 配置elasticsearch远程访问 network.host: 0.0.0.0# 不允许es根据磁盘情况来分配shard 防止磁盘不够时不能写数据 # cluster.routing.allocation.disk.threshold_enabled: false # 磁盘占有率达到99%时将不允许往es写数据,只能读数据 默认95% # cluster.routing.allocation.disk.watermark.flood_stage: 99%
docker 部署
1 docker run -it -d --name es_test -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9200:9200 -p 9300:9300 -v /usr/elk/elastic/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --network docker_elk_test -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.3.0
1 2 3 4 5 6 # 指定jjvm运行参数 最大最小内存 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" # 指定通信网络 --network docker_elk_test# 指定单节点部署 -e "discovery.type=single-node"
启动后在本机上查看 localhost:9200
部署kibana 1 2 3 mkdir /usr/elk/kibana cd /usr/elk/kibana vim kibana.yml
1 2 3 4 5 6 7 8 server.name: kibana# 配置Kibana的远程访问 server.host: "0.0.0.0"# 配置es访问地址 elasticsearch.hosts: [ "http://xx.xx.xx.xx:9200" ]# 汉化界面 i18n.locale: "zh-CN" xpack.monitoring.ui.container.elasticsearch.enabled: true
docker 部署
1 docker run -it -d -p 5601:5601 -v /usr/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml -v /etc/localtime:/etc/localtime -e ELASTICSEARCH_URL=http://xx.xx.xx.xx:9200 --network=docker_elk_test --name kibana_test docker.elastic.co/kibana/kibana:7.3.0
启动后本机查看 localhost:5601
部署logstash 1 2 3 4 5 6 mkdir /usr/elk/logstash/config cd /usr/elk/logstash/config vim logstash.yml mkdir /usr/elk/logstash/pipeline cd /usr/elk/logstash/pipeline vim logstash.conf
logstash.yml
1 2 3 4 http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://xx.xx.xx.xx:9200" ]
logstash.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 input { file { type => "systemlog-localhost" path => "/var/log/game/*.log" codec => json { charset => "UTF-8" } start_position => "beginning" stat_interval => "5" } } output { elasticsearch { hosts => ["xx.xx.xx.xx:9200" ] index => "game_test" } }
docker部署
1 docker run -it -d --name logstash_test --network=docker_elk_test -p 5000:5000 -v /usr/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /usr/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /usr/log/game:/var/log/game docker.elastic.co/logstash/logstash:7.3.0
1 2 -v /usr/log /game:/var/log /game
现在在文件 /usr/log/game/xxx.log 在kibana创建索引index后就可以查看
总结 上文只是elk
的初步部署方式
在logstash
中还有很多采集日志的小技巧,特别是grok
中的正则
logstash官网 中可以进一步查看相应内容