系统监控
介绍
系统监控是运维工作中至关重要的一环,它帮助管理员实时了解系统的运行状态、性能指标以及潜在问题。Grafana Loki 是一个开源的日志聚合系统,专门为日志监控和告警设计。与传统的监控工具不同,Loki 专注于日志数据的高效存储和查询,特别适合云原生环境。
在本章节中,你将学习如何利用 Loki 进行系统监控,包括配置、查询和告警设置。
为什么需要系统监控?
系统监控的主要目标包括:
- 实时发现问题:通过监控日志和指标,快速发现系统异常。
- 性能优化:分析历史数据,识别性能瓶颈。
- 容量规划:预测资源需求,避免资源不足或浪费。
- 安全审计:跟踪用户行为和系统事件,确保安全性。
提示
Loki 的优势在于其轻量级的索引设计和与 Prometheus 的深度集成,非常适合大规模分布式系统的日志监控。
Loki 系统监控基础
1. 数据采集
Loki 通过 Promtail 或 Fluent Bit 等代理工具采集日志数据。以下是一个简单的 Promtail 配置示例:
yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
2. 日志查询
使用 Loki 的 LogQL 查询语言过滤和分析日志。例如,查询错误日志:
logql
{job="varlogs"} |= "error"
输出示例:
2023-10-01T12:00:00Z ERROR service failed to start
2023-10-01T12:05:00Z ERROR connection timeout
3. 告警规则
在 Grafana 中配置告警规则,例如检测高频错误:
yaml
groups:
- name: example
rules:
- alert: HighErrorRate
expr: |
sum(rate({job="varlogs"} |= "error" [5m])) by (job) > 10
for: 10m
labels:
severity: critical
annotations:
summary: "High error rate detected in {{ $labels.job }}"
实际案例:监控 Web 服务
场景描述
假设你运行一个 Web 服务,需要监控以下内容:
- HTTP 请求错误(如 5xx 状态码)。
- 慢响应(延迟 > 1 秒)。
实现步骤
-
配置 Promtail 收集 Nginx 日志:
yamlscrape_configs:
- job_name: nginx
static_configs:
- targets: [localhost]
labels:
job: nginx
__path__: /var/log/nginx/access.log -
创建 LogQL 查询:
- 查询 5xx 错误:
logql
{job="nginx"} | json | status >= 500
- 查询慢响应:
logql
{job="nginx"} | json | duration > 1s
- 查询 5xx 错误:
-
设置告警:
yamlrules:
- alert: Nginx5xxErrors
expr: |
sum(rate({job="nginx"} | json | status >= 500 [5m])) by (service) > 5
annotations:
description: "5xx errors detected in {{ $labels.service }}"
可视化监控数据
在 Grafana 中创建仪表盘,展示关键指标:
- 错误率趋势图。
- 请求延迟分布。
- 服务健康状态。
总结
通过本章学习,你掌握了:
- Loki 在系统监控中的核心作用。
- 如何配置数据采集和告警规则。
- 使用 LogQL 查询和分析日志。
- 实际案例中监控 Web 服务的方法。
扩展练习
- 尝试为你的本地开发环境配置 Promtail 和 Loki。
- 编写一个 LogQL 查询,过滤出包含特定关键字的日志。
- 在 Grafana 中创建一个简单的监控仪表盘。