ELK(ES + Logstash + Kibana)采日志有两条路,差别在日志怎么从应用走到 Logstash。
两种采集方案
方案一:Logstash 直接读日志文件。 每台服务器上装一个 Logstash,配置成固定读某个日志文件,然后写进 ES,开发者在 Kibana 里查。

方案二:ELK + Kafka。 Logstash 不直接碰日志文件,而是应用先把日志写进 Kafka,Logstash 再从 Kafka 消费。

不管哪种方案,ES 和 Kibana 都得装,所以先做方案一。下面全部基于 Docker,ES 和 Kibana 最好保持同一个版本。
Elasticsearch
镜像页:https://hub.docker.com/_/elasticsearch/tags?page=1&name=7.14.0
docker run -d --name elasticsearch \
--net macvlan --ip 192.168.31.97 \
-v /home/myfiles/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /home/myfiles/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /home/myfiles/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" \
docker.io/jasonleemz/elasticsearch:230730
discovery.type=single-node 是单节点模式,不用配集群发现;堆内存固定 1 GB,小机器上比较稳当。
elasticsearch.yml:
http.host: 0.0.0.0
xpack.security.enabled: false
0.0.0.0 是为了让容器外的 Kibana 能连进来,关掉 security 则是省掉证书和账号配置。仅限内网环境这么用,别直接暴露到公网。
Kibana
镜像页:https://hub.docker.com/_/kibana/tags?page=1&name=7.14.0
docker run -itd --name kibana \
--net macvlan \
-e ELASTICSEARCH_HOSTS="http://192.168.31.97:9200" \
-v /home/myfiles/docker/kinaba/config/kinaba.yml:/usr/share/kibana/config/kinaba.yml \
docker.io/jasonleemz/kinaba:230731
kinaba.yml:
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.host: "0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
两个容器都跑在 macvlan 网络上,ES 用固定 IP 192.168.31.97,所以 Kibana 启动参数里的 ELASTICSEARCH_HOSTS 写这个地址即可,不靠容器名解析。
进 Kibana 后台
Kibana 的端口是 5601,浏览器打开 http://kibana:5601/:

评论
还没有人留言。