Linux下安装ELK
简介
ELK 是 Elasticsearch、Logstash 和 Kibana 的缩写,它们代表的是一套成熟的日志管理系统,ELK Stack 已经成为目前最流行的集中式日志解决管理方案。
Elasticsearch
分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
Logstash
数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;
Kibana
数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;
Filebeat
ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发是对它的替代。在需要采集日志数据的服务上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取日志文件数据,迅速发送到 Logstash 进行解析,或直接发送到 Elasticsearch 进行集中式存储和分析。
安装 elasticsearch
下载镜像
docker pull elasticsearch:7.17.0
运行
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.0
检测是否启动成功,注意开启防火墙的端口(9200,9300)限制
浏览器访问 ip:9200
,响应为
{
"name" : "adfd092fcbb6",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "QYlWm28zSpCE39liFBr37g",
"version" : {
"number" : "7.17.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "bee86328705acaa9a6daede7140defd4d9ec56bd",
"build_date" : "2022-01-28T08:36:04.875279988Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
修改配置
# 进入docker容器
docker exec -it elasticsearch /bin/bash
cd config
# 修改配置文件
vi elasticsearch.yml
# 增加下面两项,如果不添加以下两项,elasticsearch-head连接不了
http.cors.enabled: true
http.cors.allow-origin: "*"
# 重启 es 容器
docker restart elasticsearch
如果容器内不能编辑,就先拷贝出来
docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml .
docker cp elasticsearch.yml elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml
安装 elasticsearch-head(ES可视化工具)
下载镜像
docker pull mobz/elasticsearch-head:5
运行
docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5
连接 es
安装 kibana
下载镜像
docker pull kibana:7.17.0
运行
docker run -d --name kibana -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://ip:9200 kibana:7.17.0
浏览器访问 ip:5601
安装 logstash
下载镜像
docker pull logstash:7.17.0
创建配置文件
mkdir -p /data/elk/logstash/conf.d
cd /data/elk/logstash
vim logstash.yml
内容如下:
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash
#以下为filebeat的配置
cd /data/elk/logstash/conf.d
vi filebeat.conf
内容如下:
input {
beats {
port => 5044
codec => "json"
}
}
output {
elasticsearch { hosts => ["ip:9200"] }
}
安装 filebeat
下载镜像
docker pull elastic/filebeat:7.5.1
运行
docker run -d --name=filebeat elastic/filebeat:7.5.1
修改配置文件
docker cp filebeat:/usr/share/filebeat /root/test_elk/
chmod 777 -R /root/test_elk/filebeat
chmod go-w /root/test_elk/filebeat/filebeat.yml
修改配置文件 filebeat.yml
filebeat:
inputs:
- type: log
paths:
- /data/log/java-projects/sys-manager/sys-manager_api.log
multiline:
pattern: '^\d{4}-\d{1,2}-\d{1,2}'
negate: true
match: after
fields:
type: demo1
scan_frequency: 15s
ignore_older: 24h
output:
logstash:
hosts: ["ip:5044"]
重新运行
docker rm -f filebeat
docker run -d \
--name=filebeat \
-v /root/test_elk/filebeat:/usr/share/filebeat \
-v /data/log/java-projects/sys-manager:/data/log/java-projects/sys-manager \
elastic/filebeat:7.5.1
手动添加日志
echo "this is a test log message" >> /data/log/java-projects/sys-manager/sys-manager_api.log
在 kibana 上查看效果
总结
ELK 的版本需要一致,不然可能导致 ELK 无法使用。filebeat 的版本不需要特别注意,无特殊需求与本文一致即可。注意开启防火墙的端口限制。ELK 需要较大的内存,最好剩余 4G 以上。
遇到的问题
docker kibana nable to retrieve version information from Elasticsearch nodes. getaddrinfo
运行 kibana 失败,原因为 es 地址配置错误,要使用 ELASTICSEARCH_HOSTS 参数,而不是 ELASTICSEARCH_URL
Logstash stopped processing because of an error: (SystemExit) exit
运行 logstash 失败,原因为 配置文件错误,/data/elk/logstash/conf.d/filebeat.conf,写成了 filebeat.yml
参考
docker安装ELK
Docker 部署 ELK 详解
docker安装filebeat
docker kibana nable to retrieve version information from Elasticsearch nodes. getaddrinfo