随着微服务的发展,目前的应用很多都是分布式的,服务会落在不同的节点上。这个时候,日志的查看就是一个问题了。之前单应用的时候,我们只要去服务器上看下日志文件就行。分布式的应用,首先要确定是哪个服务出的问题,该服务在哪个节点上。
那么,解决这个问题的方向,当然就是日志的收集。目前行业主要有elk,splunk等方案。
我们今天说下elk,elk指的是elasticsearch,logstash,kibana.
- elasticsearch : 搜索引擎
- filebeat:日志收集
- logstash:日志解析过滤
- kibana:展示面板
考虑到logstash的性能消耗比较大,而且,elasticsearch对json的支持,决定不使用logstash ,直接打出json格式的日志,然后,通过filebeat直接发送到elasticsearch。这里我们用docker来部署elasticsearch和kibana。当前的版本是7.2.4。
通过dockerhub上对镜像的介绍,kibana默认访问的是localhost:9200。但是,我们是通过docker部署的,elasticsearch和kibana在两个容器中,查看官方文档 https://www.elastic.co/guide/en/kibana/current/docker.html 可以通过环境变量 ELASTICSEARCH_HOSTS 指点elasticsearch的地址。
或者配置docker网络走网桥模式,两个容器用同一个network,也可以互通
编写docker-compose文件
version: '3'
services:
kibina-elasticsearch:
image: elasticsearch:7.4.2
container_name: kibina-elasticsearch
restart: always
ports:
- "9200:9200"
- "9300:9300"
environment:
- "discovery.type=single-node"
kibina:
image: kibana:7.4.2
container_name: kibina-ui
restart: always
ports:
- "5601:5601"
environment:
- "ELASTICSEARCH_HOSTS=http://192.168.122.115:9200"
到此,服务端已经搭建完成,下面,我们需要部署客户端的filebeat。
下载对应版本的filebeat,然后修改 filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/logs/ithere/*
output.elasticsearch:
hosts: ["192.168.122.115:9200"]
启动filebeat
./filebeat -e -c filebeat.yml
下面去kibana看下效果
默认情况下,kibana没有配置索引

我们去创建一个索引的正则,可以看到当前已经有一个索引了

所以我们创建一个filebeat开头的索引规则
在discover中就可以看到结果了
