作者: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 自定義配置介紹
- 配置模型
Ops Agent 使用內置默認配置;您無法直接修改此內置配置。但是,您可以創建包含替換內容的文件,代理重啟時這些替換內容會與內置配置合并。
配置的構成要素如下:
- receivers:此元素描述代理要收集的信息。
- processors:此元素描述代理可以如何修改收集的信息。
- service:此元素將接收器和處理器連接在一起,以創建數據流,稱為“流水線”。service 元素包含一個 pipelines 元素,后者可包含多個流水線。
內置配置由這些元素組成,我們可以使用相同的元素來替換該內置配置。
每個接收器和每個處理器都可以用于多個流水線。
- 內置配置
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]
- 用戶指定的配置
如需替換內置配置,您需要向用戶配置文件添加新配置元素。將您的 Ops Agent 配置放在以下文件中:
- 對于 Linux:/etc/google-cloud-ops-agent/config.yaml。
- 對于 Windows:C:Program FilesGoogleCloud OperationsOps Agentconfigconfig.yaml。
用戶指定的配置將在代理重啟時與內置配置合并。
如需替換內置接收器、處理器或流水線,請使用相同的標識符在 config.yaml 文件中重新定義它。
例如,指標的內置配置包含一個指定 60 秒收集時間間隔的 hostmetrics 接收器。如需將主機指標的收集時間間隔更改為 30 秒,請在 config.yaml 文件中添加名為 hostmetrics 的指標接收器,并將 collection_interval 值設置為 30 秒,如以下示例所示:
metrics:
receivers:
hostmetrics:
type: hostmetrics
collection_interval: 30s
- 日志記錄接收器
receivers 元素包含一組接收器,每個接收器由有 RECEIVER_ID 標識,,并包含一個 type 元素。接收器描述如何檢索日志;例如,通過跟蹤文件、使用 TCP 端口或者從 Windows 事件日志檢索。
- 日志記錄處理器
可選的 processors 元素包含一組處理指令,每個指令均由 PROCESSOR_ID 標識,并包含一個 type 元素。處理器描述如何操作接收器收集的信息。
- parse_json:解析 JSON 格式的結構化日志。
- parse_multiline:解析多行日志。(僅 Linux)
- parse_regex:通過正則表達式模式解析文本格式日志,將其轉換為 JSON 格式的結構化日志。
- 日志記錄服務
日志記錄服務可自定義 Ops Agent 自己的日志的詳細程度,并將日志記錄接收器和處理器同時連接到流水線中。service 部分包含兩個元素:log_level 和 pipelines。
Ops Agent & Nginx配置實踐
- 概述
nginx 集成會收集連接指標和訪問日志。連接指標可捕獲連接的當前狀態:活動、讀取或等待。系統會根據連接詳情解析訪問日志,其中包括映射到請求、客戶端、服務器和消息的字段。
- 前提
必須在 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;
}
}
- 為 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
- 測試驗證
重啟代理后,通過測試請求驗證,在 Cloud Logging中觀察獲取到的日志
Ops Agent & MySQL配置實踐
MySQL 集成會收集與 InnoDB、緩沖池和各種其他操作相關的性能指標。它還會收集常規、錯誤和慢查詢日志,并將其解析為 JSON 載荷。錯誤日志會被解析為其錯誤代碼和子系統。慢查詢日志會被解析為描述查詢性能的鍵值對,包括查詢時間和檢查的行。
- 配置示例
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
- 以mysql_general 為例,日志包含 LogEntry 中的以下字段:
字段 |
類型 |
說明 |
jsonPayload.tid |
數字 |
日志源自的線程 ID |
jsonPayload.command |
字符串 |
要記錄的數據庫操作的類型 |
jsonPayload.message |
字符串 |
數據庫操作的日志 |
timestamp |
字符串 (Timestamp) |
記錄條目的時間 |
- Insert 測試
Ops Agent & Apache Kafka配置實踐
Apache Kafka 集成會收集代理指標,例如主題請求數和失敗數。它還會監控代理上的分區。此外,該集成還會收集 Kafka 日志并將其解析為 JSON 載荷。結果將包含日志記錄器、級別和消息字段。
- 配置示例
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
- 記錄的內容
kafka 日志的 logName 派生自配置中指定的接收器 ID。LogEntry 中的詳細字段如下所示。
字段 |
類型 |
說明 |
jsonPayload.source |
字符串 |
發起日志的模塊和/或線程。 |
jsonPayload.logger |
字符串 |
發起日志的日志記錄器的名稱。 |
jsonPayload.message |
字符串 |
日志消息,包括詳細的堆棧軌跡(如果提供)。 |
severity |
字符串 (LogSeverity) |
日志條目級別(已轉換)。 |
timestamp |
字符串 (Timestamp) |
收到請求的時間。 |
任何空白或缺失的字段都不會出現在日志條目中。
- 測試
- 發布消息測試
- Cloud Logging 查看日志
常見問題
- Ops Agent 內置的默認配置有什么功能?
日志記錄方面:無需任何設置即可收集的標準系統日志(用于 Linux 的 /var/log/syslog 和 /var/log/messages,以及 Windows 事件日志)。
監控方面:無需任何設置即可收集的系統指標。