上一篇已经教大家如何在 Ubuntu 22.04 安装 Loki,今天就来谈谈如何透过 Promtail 日誌收集器将Windows Event Logs 推送到 Loki 并于 Grafana 进行可视化的展现吧。
我们可以把 Promtail 视为一种代理程式,负责传送本地端的日誌到私有的 Loki 或者是 Grafana Cloud,并安装在想要监控的应用程式的机器中。
主要负责的工作:
发现目标,即日誌来源或者档案将标籤附加到日誌串流将它们推送到 Loki 实例安装 Promtail
从 Loki 存储库下载最新的发行版本
https://github.com/grafana/loki/releases
https://github.com/grafana/loki/releases/download/v2.7.1/promtail-windows-amd64.exe.zip
将其解压缩后放到想要的位置,我们以 C:\promtail 作为範例
在 C:\promtail 目录底下新增 promtail-local-config.yaml 文件
我们透过 windows_events 区块告诉 Promtail 如何抓取 Windows Event Logs 并将传送它们到 Loki。
https://github.com/grafana/loki/blob/main/docs/sources/clients/promtail/scraping.md
server: http_listen_port: 9080 grpc_listen_port: 0positions: filename: "./positions.yaml"clients: - url: http://your_loki_ip:3100/loki/api/v1/push scrape_configs:- job_name: windows windows_events: use_incoming_timestamp: false bookmark_path: "./bookmark.xml" eventlog_name: "Application" xpath_query: '*' labels: job: windows relabel_configs: - source_labels: ['computer'] target_label: 'host'
书籤路径 bookmark_path 负责记录最后处理的事件,当 Promtail 重新启动时需要它,以允许它从中断的地方继续读取日誌。
<BookmarkList> <Bookmark Channel='Application' RecordId='23520' IsCurrent='true'/></BookmarkList>
启动服务
以系统管理员权限开启命令提示字元,输入下列指令启动 Promtail。
cd C:\promtail.\promtail-windows-amd64.exe --config.file=promtail-local-config.yaml
这样便成功启动 Promtail 并开始传送 Application 事件纪录到 Loki
此时回到 Grfana 使用 Loki 做为资料来源,透过 Explore 便可以看到推送过来的纪录了。
点选 channel 与 job 标籤的属性当作查询条件,点选 Show Logs。
如果需要,您可以通过 Relabeling 重新标记预设的标籤。
如上面的範例我们将预设的 computer 标籤重新标记成 host
当 Promtail 接收到一个事件时,它将附加 channel 和 computer 标籤,并将事件序列化成 JSON 格式。
注册服务
接下来要将刚刚的指令注册成服务,让它每次开机自动执行。
我们透过 nssm 安装并启动 Windows 服务
https://blog.miniasp.com/post/2021/09/15/Useful-tools-the-Non-Sucking-Service-Manager
Windows 内建的注册 Windows 服务的工具 sc.exe 跟 New-Service 注册服务后都无法正常运行。
下载并将 nssm.exe 解压缩到 C:\promtail 底下
https://nssm.cc/release/nssm-2.24.zip
开启命令提示字元,输入下列指令
cd C:\promtailnssm install "Promtail Agent"
Application Path 选择 C:\promtail\promtail-windows-amd64.exe
Application Arguments 输入 --config.file=promtail-local-config.yaml
最后按下 Install Servcie 即可注册成 Windows 服务
需要注意的是可执行档所在路径为 C:\promtail\nssm.exe,如果 nssm.exe 被移动到其他位置服务将无法启动。
或者请将 nssm.exe 摆在一个确定不会异动或删除的路径
Promtail Pipeline 日誌处理
各位看官应该有注意到使用官方提供的 Scrape Configs 实在太过阳春,所以接下来我们要介绍 Promtail Pipeline 日誌处理,Pipeline 用于转换单行日誌、标籤与时间戳。
Pipeline 至少由一个 Stages 阶段组成,而阶段有 4 种类型:
解析阶段:解析当前日誌行并从中提取数据,然后提取的数据可供其他阶段使用。转换阶段:换从先前阶段提取的数据动作阶段:从前面的阶段提取数据并用它们做一些事情,例如添加现有标籤或修改到日誌行。过滤阶段:可以根据某些条件选择性地删除资料修改 promtail-local-config.yaml 文件,内容如下。
server: http_listen_port: 9080 grpc_listen_port: 0positions: filename: "./positions.yaml"clients: - url: http://your_loki_ip:3100/loki/api/v1/push scrape_configs:- job_name: windows windows_events: eventlog_name: "Application" use_incoming_timestamp: true xpath_query: '*' bookmark_path: "./bookmark-application.xml" exclude_event_data: true exclude_user_data: true labels: logsource: windows-eventlog pipeline_stages: - json: expressions: source: source eventID: event_id level: levelText - labels: source: eventID: level:- job_name: windows windows_events: eventlog_name: "System" use_incoming_timestamp: true xpath_query: '*' bookmark_path: "./bookmark-system.xml" exclude_event_data: true exclude_user_data: true labels: logsource: windows-eventlog pipeline_stages: - json: expressions: source: source eventID: event_id level: levelText - labels: source: eventID: level:
这边我们多新增一个 Job 来推送系统日誌并使用了两个阶段来处理日誌
转换阶段:使用 JOSN 剖析 Source、Event ID 与 Level 栏位动作阶段:将剖析到的栏位分别贴上对应的标籤再回到 Grfana 的 Explore 可以看到推送过来的日誌多了许多标籤可以让我们进行过滤条件。
虽然 Explore 非常适合系统管理人员快速进行操作,但对于初次使用的用户或在半夜收到告警的人来说,它也可能有点令人生畏。
下一篇我们将教大家如何拥有自己的仪表板,除了实作 Explore 的现有的功能,还可以简单地透过预先设置的标籤进行搜索,以帮助一些团队在故障排除时快速找到他们正在寻找的东西。
参考文件
https://grafana.com/docs/loki/latest/clients/promtail/https://grafana.com/docs/loki/latest/clients/promtail/configuration/https://jishuin.proginn.com/p/763bfbd5863bhttps://mp.weixin.qq.com/s?biz=MzU4MjQ0MTU4Ng==&mid=2247492163&idx=1&sn=56b26aa387ccacdf0203d8897ba58eb6https://mp.weixin.qq.com/s?biz=MzU4MjQ0MTU4Ng==&mid=2247492144&idx=1&sn=a1cc13a6423fe50173856bfc898e8d77https://grafana.com/docs/loki/latest/clients/promtail/pipelines/https://grafana.com/docs/loki/latest/clients/promtail/stages/