首页 检索分析服务Elasticsearch版 Elasticsearch Serverless服务 最佳实践 通过Filebeat将nginx日志输出至Elasticsearch Serverless

通过Filebeat将nginx日志输出至Elasticsearch Serverless

当您需要查看并分析nginx的日志时,可通过Filebeat采集nginx日志到阿里云Elasticsearch Serverless中,然后在控制台中完成可视化查询、分析和展示。本文介绍具体的实现方法。

操作流程

  1. 步骤一:环境准备

  2. 步骤二:安装并配置Filebeat

  3. 步骤三:在Elasticsearch Serverless服务控制台查看日志信息

步骤一:环境准备

  1. 开通阿里云Elasticsearch Serverless服务,并创建应用和日志类型的数据流。

  2. 安装并启动nginx服务。

    本文使用阿里云ECS实例安装nginx服务。在安装前需要先创建阿里云ECS实例,具体操作请参见自定义购买实例

    1. 连接ECS实例。

      具体操作请参见通过密码或密钥认证登录Linux实例

      说明

      本文档以普通用户权限为例。

    2. 安装nginx。

      sudo yum -y install nginx
    3. 启动nginx。

      sudo systemctl start nginx

步骤二:安装并配置Filebeat

  1. 连接ECS实例。

    具体操作请参见通过密码或密钥认证登录Linux实例

    说明

    本文档以普通用户权限为例。

  2. 安装Filebeat。

    1. 下载Filebeat安装包。

      sudo wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.5.3-linux-x86_64.tar.gz
    2. 解压。

      sudo tar -zxf filebeat-8.5.3-linux-x86_64.tar.gz
  3. 修改Filebeat配置文件。

    1. 进入Filebeat目录。

      cd filebeat-8.5.3-linux-x86_64
    2. 新建Filebeat配置文件(示例文件名称为fb2serverless.yml)。

      sudo vim fb2serverless.yml
    3. 在Filebeat配置文件中添加以下脚本。

      filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - /var/log/nginx/access.log
      
      - type: filestream
        enable: false
        paths:
          - /var/log/nginx/access.log
      
        multiline.type: pattern
        multiline.pattern: '^[[:space:]]+(at|\.{3})[[:space:]]+\b|^Caused by:'
        multiline.negate: false
        multiline.match: after
      
      filebeat.config.modules:
        # Glob pattern for configuration loading
        path: ${path.config}/modules.d/*.yml
      
        reload.enabled: false
      
      output.elasticsearch:
        # Array of hosts to connect to.
        hosts: ["https://es-serverless-cn-hangzhou.aliyuncs.com:443"]
        allow_older_versions: true
      
      setup.ilm.enabled: false
      setup.template.enabled: false
      output.elasticsearch.headers:
        X-Api-Key: *****
        X-Xops-App-Name: zjy-test
        X-Xops-Data-Stream-Name: test_filebeat
        X-Xops-Data-Type: logs

      部分参数说明如下:

      参数

      说明

      filebeat.inputs

      配置Filebeat的输入信息。type需要配置为log,paths为具体的文件路径。本文以nginx的访问日志为例,path配置为/var/log/nginx/access.log

      重要

      您还需要配置type为filestream类型的enable值为false,否则无法正常上传。

      multiline

      处理跨行信息采集的配置,详细信息请参见Manage multiline messages

      filebeat.config.modules

      加载目录中启用的模块配置。

      output.elasticsearch

      输出端Elasticsearch配置:

      • hosts:配置为Elasticsearch Serverless服务的访问地址,获取方式请参见查看应用的基本信息

      • allow_older_versions:是否允许向低版本的Elasticsearch中写数据,当您的Filebeat版本高于版本兼容性要求时,需要配置为true。 版本兼容性详情,请参见版本兼容性

      setup.ilm.enabled

      创建的新索引是否启用索引生命周期管理。需要配置为false。

      setup.template.enabled

      是否加载Elasticsearch索引模板。需要配置为false。

      output.elasticsearch.headers

      Serverless数据流的配置:

  4. 启动Filebeat ,并将日志输出到fb2serverless.log中。

    sudo nohup ./filebeat -e -c fb2serverless.yml > fb2serverless.log 2>&1 &
    说明

    如果无法传输数据,可以查看fb2serverless.log文件内容分析原因。

步骤三:在Elasticsearch Serverless服务控制台查看日志信息

  1. 进入Elasticsearch Serverless服务页面。

  2. 在左侧导航栏,单击应用管理

  3. 在应用列表中,单击目标应用名称。

  4. 在左侧导航栏,选择全观测应用与可视化 > 日志查询

  5. 日志查询页面,选择目标数据流,查看该数据流的日志。

    查看日志

    更多详细信息,请参见日志查询

常见问题

Q:用Filebeat推送数据时,Filebeat的日志里出现一条log.level报错,是什么原因?

A:日志中出现以下报错信息,您忽略即可,该报错不影响ES推送数据。

{"log.level":"error","@timestamp":"2023-04-28T10:14:23.121+0800","log.logger":"elasticsearch","log.origin":{"file.name":"elasticsearch/client.go","file.line":387},"message":"expected item response object","service.name":"filebeat","ecs.version":"1.6.0"}

阿里云首页 检索分析服务 Elasticsearch版 相关技术圈