Press "Enter" to skip to content

elasticsearch+kibana+filebeat搭建

背景:由于C端用户增多,我们需要有一款针对用户的日志系统,而不是登录容器分析日志,从而提高效率,快速定位问题

分析: 由于在上家公司接触到kibana,对查询语法和使用有一些基本认识,查询资料发现要搭建kibana,需要同时安装elasticsearch和filebeat

  • elasticsearch:分布式实时搜索分析引擎,用作全文搜索,结构化搜索和分析搜索,可以用来处理大数据量
  • kibana:基于web界面,使用户能够直观地查看,分析和可视化存储在elasticsearch中的数据
  • filebeat:轻量级日志采集器,用于转发和集中日志中的数据
Step1: 安装

使用dockerc-compose 搭建【此处省略docker-compose的安装】

docker-compose.yml 【注意:elasticsearch和kibana和filebeat最好使用同一个版本】


version: '3.7'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3  # 使用你需要的版本
    container_name: elasticsearch-lican
    environment:
      - node.name=elasticsearch
      - discovery.type=single-node  # 单节点模式适合测试和开发环境
      - "xpack.security.enabled=false"  # 如果不需要X-Pack安全特性可以禁用它
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"  # 设置JVM内存
    ports:
      - "9200:9200"  # 映射Elasticsearch的HTTP端口到宿主机的9200端口
      - "9300:9300"  # 映射Elasticsearch的TCP传输端口用于集群节点间的通信
    volumes:
      - data:/usr/share/elasticsearch/data  # 将数据保存在一个名为data的卷中以便在容器停止后数据不会丢失

  kibana:
    image: docker.elastic.co/kibana/kibana:7.17.3
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - I18N_LOCALE=zh-CN // 配置中文
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

  filebeat:
    image: docker.elastic.co/beats/filebeat:7.17.3
    container_name: filebeat
    user: "root"  # 可能需要root权限来读取日志文件
    volumes:
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro # 配置文件
      - /var/log:/var/log:ro  # 假设你的日志文件在/var/log目录下
      - /data/docker/containers:/docker/ # 映射目录
    depends_on:
      - elasticsearch

volumes:
  data:
    driver: local

配置好编排文件后,启动

docker-compose up -d;  // -d:后台启动
docker-compose ps; // 查询运行状态

当发现以下界面,表示安装并启动成功

1721874295334

打开浏览器,通过服务器ip:端口访问,查看服务运行状态【请配置服务器端口的安全组】

访问http://localhost:9200,出现以下界面,表示elasticsearch运行成功

1721874424161

访问http://localhost:5601,出现以下界面,表示kibana运行成功

1721874484318

Step2: filebeat采集日志

配置filebeat.yml 配置文件

在dockerc-compose.yml文件中配置了filebeat的挂载目录,配置的是当前目录映射镜像内配置文件目录

  • ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro # 配置文件
filebeat.inputs:

- type: log
  enabled: true
  paths:
    - /var/log/*.log  # 读取/var/log目录下的所有.log文件
  fields:
    log_source: filebeat_container
  tags: ["system_log"]

- type: log
  enabled: true
  paths:
    - /docker/6a53835ee69299075330327bd4bb712b69cf7f55a382a6647ba631d40d335321/*.log # 系统日志
  fields:
    log_type: system
  tags: ["brewing-bigdata"]

setup.template.name: "filebeat-%{[agent.version]}"
setup.template.pattern: "filebeat-%{[agent.version]}-*"
3setup.template.json.sha1: "" # 可选如果你知道模板文件的SHA1哈希值

output.elasticsearch:
  hosts: ["http://120.79.80.2:9200"]
  indices:
    - index: "system_log-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "system_log"
    - index: "brewing_bigdata-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "brewing-bigdata"

setup.kibana:
  host: "kibana:5601"

配置文件的inputs和outputs为设置索引并关联采集日志目录的地方,可以为多组,配置完成后,重启服务

docker-compose down;docker-compose up -d;

在服务器上执行 docker logs -f -n 100 filebeat 查看运行日志,无明显错误,表示filebeat运行成功

1721874556697

Step3: 关联elasticsearch和filebeat索引

由于配置的filebeat索引是一个动态索引,日志采集后,需要进入elastcisearch中进行关联

访问 http://localhost:5601

1721875044228

1721875068193

1721875093407

1721875240450

创建完成之后,就可以在索引栏这里更换索引了,查看filebeat在对应日志目录中采集到的日志啦~

1721875321266

此时,我就可以使用KQL语法搜索日志了

1721875405540