ELK

Elasticsearch、Logstash 和 Kiabana组成一个日志分析平台 。

Elasticsearch

分布式的 Restful 风格的搜索和数据分析引擎。

Logstash

收集服务器日志,具有实时管道功能,可以动态地将来自不同数据源的数据统一起来,并将数据标准化到您所选择的目的地。

  • 输入
  • 过滤器
  • 输出

Kibana

数据面板。

ELK工作流程

image001.png

ELK 平台搭建

Elasticsearch安装
  • 下载Elasticsearch 7.6.2的docker镜像:
1
docker pull elasticsearch:7.6.2
  • 修改虚拟内存区域大小,否则会因为过小而无法启动:
1
sysctl -w vm.max_map_count=262144
  • 使用如下命令启动Elasticsearch服务:
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/
  • 安装中文分词器IKAnalyzer,并重新启动:
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

img

Logstash安装
  • 下载Logstash7.6.2的docker镜像:
1
docker pull logstash:7.6.2
  • 修改Logstash的配置文件logstash.confoutput节点下的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
mkdir /mydata/logstash
  • 使用如下命令启动Logstash服务;
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
  • 进入容器内部,安装json_lines插件。
1
logstash-plugin install logstash-codec-json_lines
Kibana安装
  • 下载Kibana7.6.2的docker镜像:
1
docker pull kibana:7.6.2
  • 使用如下命令启动Kibana服务:
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

img

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/
#控制台输入有结果即正确
#(可能存在内存问题)