elk环境配置
elasticsearchlogstashkibanafilebeat

随着微服务的发展,目前的应用很多都是分布式的,服务会落在不同的节点上。这个时候,日志的查看就是一个问题了。之前单应用的时候,我们只要去服务器上看下日志文件就行。分布式的应用,首先要确定是哪个服务出的问题,该服务在哪个节点上。

那么,解决这个问题的方向,当然就是日志的收集。目前行业主要有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中就可以看到结果了

暂无评论