Ops Agent 第三方应用配置实践

作者:MeshCloud脉时云公有云架构师许多杰

引言

Ops Agent 在 Google Cloud Compute Engine 中将日志记录和指标组合到单个代理中,提供了用于收集日志和指标的基于 YAML 的配置,并具有高吞吐量日志记录功能,并且可以配置 Ops Agent 以从受支持的第三方应用收集日志和指标。

整体架构

技术简介

将 Ops Agent下载到 Compute Engine中,采用Ops Agent 自定义配置的方式,修改配置文件以覆盖默认的内置配置文件。在Ops Agent配置文件中通过手动设置receivers、processors和service,以达到我们收集指定第三方应用log和metric的目的。

Ops agent 自定义配置介绍

  1. 配置模型

Ops Agent 使用内置默认配置;您无法直接修改此内置配置。但是,您可以创建包含替换内容的文件,代理重启时这些替换内容会与内置配置合并。

配置的构成要素如下:

  • receivers:此元素描述代理要收集的信息。
  • processors:此元素描述代理可以如何修改收集的信息。
  • service:此元素将接收器和处理器连接在一起,以创建数据流,称为“流水线”。service 元素包含一个 pipelines 元素,后者可包含多个流水线。

内置配置由这些元素组成,我们可以使用相同的元素来替换该内置配置。

每个接收器和每个处理器都可以用于多个流水线。

  1. 内置配置

Ops Agent 的内置配置定义了日志和指标的默认收集。下面显示了适用于 Linux 和 Windows 的内置配置:默认情况下,Ops Agent 会收集基于文件的 syslog 日志和主机指标。

logging:
  receivers:
    syslog:
      type: files
      include_paths:
      - /var/log/messages
      - /var/log/syslog
  service:
    pipelines:
      default_pipeline:
        receivers: [syslog]
metrics:
  receivers:
    hostmetrics:
      type: hostmetrics
      collection_interval: 60s
  processors:
    metrics_filter:
      type: exclude_metrics
      metrics_pattern: []
  service:
    pipelines:
      default_pipeline:
        receivers: [hostmetrics]
        processors: [metrics_filter]
  1. 用户指定的配置

如需替换内置配置,您需要向用户配置文件添加新配置元素。将您的 Ops Agent 配置放在以下文件中:

  • 对于 Linux:/etc/google-cloud-ops-agent/config.yaml。
  • 对于 Windows:C:\Program Files\Google\Cloud Operations\Ops Agent\config\config.yaml。

用户指定的配置将在代理重启时与内置配置合并。

如需替换内置接收器、处理器或流水线,请使用相同的标识符在 config.yaml 文件中重新定义它。

例如,指标的内置配置包含一个指定 60 秒收集时间间隔的 hostmetrics 接收器。如需将主机指标的收集时间间隔更改为 30 秒,请在 config.yaml 文件中添加名为 hostmetrics 的指标接收器,并将 collection_interval 值设置为 30 秒,如以下示例所示:

metrics:
  receivers:
    hostmetrics:
      type: hostmetrics
      collection_interval: 30s
  1. 日志记录接收器

receivers 元素包含一组接收器,每个接收器由有 RECEIVER_ID 标识,,并包含一个 type 元素。接收器描述如何检索日志;例如,通过跟踪文件、使用 TCP 端口或者从 Windows 事件日志检索。

  1. 日志记录处理器

可选的 processors 元素包含一组处理指令,每个指令均由 PROCESSOR_ID 标识,并包含一个 type 元素。处理器描述如何操作接收器收集的信息。

  • parse_json:解析 JSON 格式的结构化日志。
  • parse_multiline:解析多行日志。(仅 Linux)
  • parse_regex:通过正则表达式模式解析文本格式日志,将其转换为 JSON 格式的结构化日志。
  1. 日志记录服务

日志记录服务可自定义 Ops Agent 自己的日志的详细程度,并将日志记录接收器和处理器同时连接到流水线中。service 部分包含两个元素:log_level 和 pipelines。

Ops Agent & Nginx配置实践

  1. 概述

nginx 集成会收集连接指标和访问日志。连接指标可捕获连接的当前状态:活动、读取或等待。系统会根据连接详情解析访问日志,其中包括映射到请求、客户端、服务器和消息的字段。

  1. 前提

必须在 nginx 配置文件中启用 stub_status 模块,以设置在本地可访问的网址,例如,为状态页面设置
http://www.example.com/status。

server {
    listen 80;
    server_name 127.0.0.1;
    location /status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
    location / {
       root /dev/null;
    }
}
  1. 为 nginx 配置 Ops Agent

以下命令会创建配置文件,以收集和注入 nginx 的日志和指标,并在 Linux 上重启 Ops Agent。

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF

logging:
  receivers:
    nginx_access:
      type: nginx_access
      include_paths:
      - /var/log/nginx/access.log
    nginx_error:
      type: nginx_error
      include_paths:
      - /var/log/nginx/error.log

  processors:
    parse_json:
      type: parse_json
    set_http_request:
      type: modify_fields
      fields:
        httpRequest.status:
          move_from: jsonPayload.http_status
          type: integer
        httpRequest.requestUrl:
          move_from: jsonPayload.path
        httpRequest.referer:
          move_from: jsonPayload.referer
          omit_if: jsonPayload.referer = "-"
  service:
    pipelines:
      nginx:
        receivers:
          - nginx_access
          - nginx_error
        processors: [parse_json, set_http_request]
         
metrics:
  receivers:
    nginx:
      type: nginx
      stub_status_url: http://127.0.0.1:80/status
  service:
    pipelines:
      nginx:
        receivers:
          - nginx

EOF

sudo service google-cloud-ops-agent restart
  1. 测试验证

重启代理后,通过测试请求验证,在 Cloud Logging中观察获取到的日志

Ops Agent & MySQL配置实践

MySQL 集成会收集与 InnoDB、缓冲池和各种其他操作相关的性能指标。它还会收集常规、错误和慢查询日志,并将其解析为 JSON 载荷。错误日志会被解析为其错误代码和子系统。慢查询日志会被解析为描述查询性能的键值对,包括查询时间和检查的行。

  1. 配置示例
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF

logging:
  receivers:
    mysql_error:
      type: mysql_error
    mysql_general:
      type: mysql_general
    mysql_slow:
      type: mysql_slow
  service:
    pipelines:
      mysql:
        receivers:
          - mysql_error
          - mysql_general
          - mysql_slow
metrics:
  receivers:
    mysql:
      type: mysql
  service:
    pipelines:
      mysql:
        receivers:
          - mysql
EOF

sudo service google-cloud-ops-agent restart
  1. 以mysql_general 为例,日志包含 LogEntry 中的以下字段:
字段类型说明
jsonPayload.tid数字日志源自的线程 ID
jsonPayload.command字符串要记录的数据库操作的类型
jsonPayload.message字符串数据库操作的日志
timestamp字符串 (Timestamp)记录条目的时间
  1. Insert 测试

Ops Agent & Apache Kafka配置实践

Apache Kafka 集成会收集代理指标,例如主题请求数和失败数。它还会监控代理上的分区。此外,该集成还会收集 Kafka 日志并将其解析为 JSON 载荷。结果将包含日志记录器、级别和消息字段。

  1. 配置示例
logging:
  receivers:
    kafka:
      type: kafka
      include_paths: 
      - /tmp/kafka-logs/*
  service:
    pipelines:
      kafka:
        receivers:
          - kafka
metrics:
  receivers:
    kafka:
      type: kafka
  service:
    pipelines:
      kafka:
        receivers:
          - kafka
  1. 记录的内容

kafka 日志的 logName 派生自配置中指定的接收器 ID。LogEntry 中的详细字段如下所示。

字段类型说明
jsonPayload.source字符串发起日志的模块和/或线程。
jsonPayload.logger字符串发起日志的日志记录器的名称。
jsonPayload.message字符串日志消息,包括详细的堆栈轨迹(如果提供)。
severity字符串 (LogSeverity)日志条目级别(已转换)。
timestamp字符串 (Timestamp)收到请求的时间。

任何空白或缺失的字段都不会出现在日志条目中。

  1. 测试
  • 发布消息测试
  • Cloud Logging 查看日志

常见问题

  • Ops Agent 内置的默认配置有什么功能?

日志记录方面:无需任何设置即可收集的标准系统日志(用于 Linux 的 /var/log/syslog 和 /var/log/messages,以及 Windows 事件日志)。

监控方面:无需任何设置即可收集的系统指标。

发表评论

您的电子邮箱地址不会被公开。