ELK
Elasticsearch、Logstash 和 Kiabana组成一个日志分析平台 。
Elasticsearch
分布式的 Restful 风格的搜索和数据分析引擎。
Logstash
收集服务器日志,具有实时管道功能,可以动态地将来自不同数据源的数据统一起来,并将数据标准化到您所选择的目的地。
Kibana
数据面板。
ELK工作流程
ELK 平台搭建
Elasticsearch安装
- 下载Elasticsearch 7.6.2的docker镜像:
1
| docker pull elasticsearch:7.6.2
|
1
| sysctl -w vm.max_map_count=262144
|
1 2 3 4 5 6
| docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ -e "discovery.type=single-node" \ -e "cluster.name=elasticsearch" \ -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \ -d elasticsearch:7.6.2
|
- 启动时会发现
/usr/share/elasticsearch/data
目录没有访问权限,只需要修改/mydata/elasticsearch/data
目录的权限,再重新启动即可;
1
| chmod 777 /mydata/elasticsearch/data/
|
1 2 3 4
| docker exec -it elasticsearch /bin/bash
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip docker restart elasticsearch
|
1 2
| firewall-cmd --zone=public --add-port=9200/tcp --permanent firewall-cmd --reload
|
Logstash安装
- 下载Logstash7.6.2的docker镜像:
1
| docker pull logstash:7.6.2
|
- 修改Logstash的配置文件
logstash.conf
中output
节点下的Elasticsearch连接地址为es:9200
1 2 3 4 5 6
| output { elasticsearch { hosts => "es:9200" index => "mall-%{type}-%{+YYYY.MM.dd}" } }Copy to clipboardErrorCopied
|
- 创建
/mydata/logstash
目录,并将Logstash的配置文件logstash.conf
拷贝到该目录;
1 2 3 4
| docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \ --link elasticsearch:es \ -v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \ -d logstash:7.6.2
|
1
| logstash-plugin install logstash-codec-json_lines
|
Kibana安装
1
| docker pull kibana:7.6.2
|
1 2 3 4
| docker run --name kibana -p 5601:5601 \ --link elasticsearch:es \ -e "elasticsearch.hosts=http://es:9200" \ -d kibana:7.6.2
|
1 2
| firewall-cmd --zone=public --add-port=5601/tcp --permanent firewall-cmd --reload
|
1 2 3 4 5 6
| #进入logstash容器 docker exec -it logstash /bin/bash cd /usr/share/logstash/bin logstash -e 'input { stdin { } } output { stdout {} }' --path.data=/root/ #控制台输入有结果即正确 #(可能存在内存问题)
|