【微服务日志收集①】使用FileBeat+Logstash+ES搭建ELK日志系统

使用FileBeat+Logstash+ES搭建ELK日志系统,架构图如下:

1、 使用docker快速创建ES服务和Kibana服务

前置条件:需要在linux上提前安装好docker和docker-compose

1.1、在linux创建好一个用于存放docker-compose配置文件的文件夹

  • 我的目录是/app/soft-docker-compose/ELK/elasticsearch

1.2、创建一个docker-compose.yml的文件

  • 文件内容如下所示,受限于机器内存所以给ES服务配置的内存参数比较小,大家可根据机器性能自行配置(但最好配置大一些,不然性能可能受限)

    yml 复制代码
    version: '2.2'
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
        container_name: elasticsearch
        environment:
          - discovery.type=single-node  # 单节点模式
          #开启远程访问  
    #      - network.host=0.0.0.0
          #指定集群通信 IP(避免自动选择)
          - network.publish_host=192.168.75.128
          - ES_JAVA_OPTS=-Xms512m -Xmx512m    # 限制堆内存为 512MB
          - xpack.ml.enabled=false            # 关闭机器学习
    
        ports:
          - "9200:9200"
          - "9300:9300"
        volumes:
          # 数据卷映射:容器内路径固定,宿主机路径可自定义(需权限配置)
          - elasticsearch-data:/usr/share/elasticsearch/data
          # 配置文件映射:宿主机路径可自定义,容器内路径固定
          - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        deploy:
          resources:
            limits:
              memory: 1g  # 容器总内存上限 1GB
    #    networks:  
    #      - elk_network  # 加入自定义网络
    
      kibana:
        image: docker.elastic.co/kibana/kibana:7.6.1
        container_name: kibana
        environment:
          - ELASTICSEARCH_HOSTS=http://elasticsearch:9200  # 替代旧版 ELASTICSEARCH_URL
          - SERVER_HOST=0.0.0.0
          - NODE_OPTIONS=--max-old-space-size=256  # Node.js 堆内存限制为 256MB
          - xpack.monitoring.enabled=false    # 关闭监控
          - I18N_LOCALE=zh-CN                 # 设置Kibana可视化平台为中文
        ports:
          - "5601:5601"
        depends_on:
          - elasticsearch
        volumes:  
          - ./kibana.yml:/usr/share/kibana/config/kibana.yml # 挂载Kibana配置文件
        deploy:
          resources:
            limits:
              memory: 512m  # 容器总内存上限 512MB
    #    networks:  
    #      - elk_network  # 加入自定义网络
    
    #networks:  
    #  elk_network:  
    #    driver: bridge    # 使用桥接驱动
    
    volumes:
      elasticsearch-data:
        # 宿主机数据目录(可选自定义路径,默认由 Docker 管理)
        # 如需指定宿主机路径,替换为:`- /宿主机路径/elasticsearch-data:/usr/share/elasticsearch/data`
  • 保存好后,直接在当前目录下执行命令:docker-compose up -d

  • 如果启动有问题,可以根据命令docker logs -f <容器id> 显示出相关服务容器日志,根据错误自行排查解决

2、搭建LogStash服务

2.1、下载与ES配套的LogStash版本发布包、修改配置文件

  • 官网下载地址:https://www.elastic.co/cn/downloads/past-releases#logstash

  • 解压到ES目录下,并进入Logstash目录

  • 使用命令vim ~/.bash_profile配置环境变量LS_JAVA_HOME
    在文件后追加:export LS_JAVA_HOME=/app/soft-docker-compose/ELK/logstash-7.17.13/jdk

  • 接下来对logstash的输入和输出目录进行配置。进入config目录,在目录下直接修改logstash-sample.conf文件即可

    bash 复制代码
    # Sample Logstash configuration for creating a simple
    # Beats -> Logstash -> Elasticsearch pipeline.
    
    # 从filebeat输入消息,接收的端口是5044
    input {
      beats {
        port => 5044
      }
    }
    
    # 对输入的内容进行格式化处理,这里用grok插件处理非结构化数据
    # COMBINEDAPACHELOG是针对APACHE服务器提供的一种通用的解析格式,也适用于解析Nginx日志
    filter {
        grok {
            match => { "message" => "%{COMBINEDAPACHELOG}"}
        }
    }
    
    # 数据的输出,这里将结果输出到本机的elasticsearch中,索引是nginxlog
    output {
      elasticsearch {
        hosts => ["http://192.168.75.128:9200"]
        #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
        index => nginxlog		# 本次以收集nginx服务的access.log日志为例
        user => "elastic"       # 如果es配置了验证需要加这个配置
        password => "123456"	# 同上,由于我的是内网,暂时不加校验
      }
    }
  • 如上的配置就可以过滤FileBeat收集到的日志了 ,logstash更详细的配置说明参见官方文档:https://www.elastic.co/guide/en/logstash/7.17

2.2、启动Logstash服务

  • 接下来直接使用命令启动Logstash服务:nohup bin/logstash -f config/logstash-sample.conf --config.reload.automatic &
  • 可以查看当前目录下的nohup.out启动日志,看有无异常

3、搭建Filebeat服务

3.1、下载对应版本的Filebeat发布包、修改filebeat.yml

  • 去官网下载对应版本的filebeat发布包,官网下载地址:https://www.elastic.co/cn/downloads/past-releases#filebeat
  • 解压后,在解压目录下已经提供了一个模版配置文件filebeat.yml,我们需要对其修改,主要是改从文件读取日志不分,还有输出到logstash的部分
    • 先修改文件输入的部分配置:

      yml 复制代码
      # ============================== Filebeat inputs ===============================
      filebeat.inputs:
      - type: filestream
        # Change to true to enable this input configuration.
        enabled: true 
        # Paths that should be crawled and fetched. Glob based paths.
        paths:
          - /var/log/nginx/access.log	# 需要收集的日志文件路径,可以配多个
          #- c:\programdata\elasticsearch\logs\*
    • 然后修改输出到logstash的部分配置:

      yml 复制代码
      # ------------------------------ Logstash Output -------------------------------
      output.logstash:
        # The Logstash hosts
        hosts: ["192.168.75.128:5044"]

      注意:默认打开的是output.elasticsearch,输入到es,这部分配置要注释掉!我们需要现将日志收集到Logstash对数据进行过滤、分析和统一格式等。当然也可以用Logstash直接收集,但是Logstash服务过重,如果在每个应用上都部署一个Logstash,会给应用服务器增加很大的负担。因此,通常会在应用服务器上,部署轻量级的Filebeat组件。Filebeat可以持续稳定的收集简单数据,比如log日志,统一发给logstash进行收集后,再经过处理存到ES。

    • 更详细的配置参见官方文档: https://www.elastic.co/guide/en/beats/filebeat/7.17/logstash-output.html

3.2、启动Filebeat服务

  • 执行启动命令nohup ./filebeat -e -c filebeat.yml -d "publish" &
  • 进入Kibana可视化平台页面,查询验证ELK日志服务是否OK
  • 通过日志在Kibana上统计PV、UV

谢谢~ 爱在深秋,peace!

相关推荐
熙曦Sakura18 分钟前
【Git】配置Git
大数据·git·elasticsearch
J-v-a-v4 小时前
Elasticsearch搜索引擎 3(DSL)
大数据·elasticsearch·搜索引擎
烛.照1035 小时前
Shell脚本+git自动部署Java项目
java·git·elasticsearch
Elastic开源社区6 小时前
Elasticsearch 滚动索引(Rollover Index)详解
大数据·elasticsearch·日志数据·rollover index·滚动索引
Elastic开源社区8 小时前
Elasticsearch 向量检索详解
大数据·elasticsearch·搜索引擎·向量检索
Elasticsearch9 小时前
如何使用 DeepEval 优化 Elasticsearch 中的 RAG 检索
elasticsearch
.Net Core 爱好者13 小时前
git操作大全
大数据·elasticsearch·搜索引擎·gitee·c#·.net
kngines20 小时前
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离
大数据·数据库·elasticsearch·搜索引擎
kngines1 天前
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案
大数据·elasticsearch·搜索引擎·serverless