日志和指标采集
日志套件
loki + Alloy 这两个都是Grafana全家桶中的组件,支持容器和k8s(虽然我个人并不认为k8s是银弹),文档质量高,部署快捷。
部署Loki服务
下载loki默认的配置文件
wget https://raw.githubusercontent.com/grafana/loki/v3.4.1/cmd/loki/loki-local-config.yaml -O loki-config.yaml
在容器中自动loki服务,分别映射配置文件和数据文件到容器中。
# loki
docker run --name loki -d \
-v /data/loki:/mnt/config \
-v /data/loki/loki-data:/data/loki \
-p 3100:3100 \
dockerhub.mirrors.abc.com/grafana/loki:3.4.1 \
-config.file=/mnt/config/loki-config.yaml
- 修改loki配置文件后,需要重启才能生效,可以使用
docker restart重启loki。 - 3100是数据接收日志的端口。 loki有HTTP API。例如:可以通过以下url检测服务是否正常运行:
curl http://localhost:3100/ready
loki也提供了/metrics端点,可以通过Prometheus收集指标。
日志收集客户端
官方安装教程中写的是promtail,但是,promtail已经淘汰,不再更新。替代组件是alloy。
promtail做简单的文件日志收集还是比较轻便的,附上安装部署步骤:
- 下载promtail默认的配置文件:
wget https://raw.githubusercontent.com/grafana/loki/v3.4.1/clients/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml - 在容器中自动promtail服务,分别映射配置文件和采集日志的目标目录到容器中:
docker run --name promtail -d \
-v /data/loki:/mnt/config \
-v /var/log:/var/log \
dockerhub.mirrors.abc.com/grafana/promtail:3.4.1 \
-config.file=/mnt/config/promtail-config.yaml
启动Alloy日志采集服务:
docker run \
-d --name alloy \
-v /data/loki/config.alloy:/etc/alloy/config.alloy \
-p 12345:12345 \
dockerhub.mirrors.abc.com/grafana/alloy:latest \
run --server.http.listen-addr=0.0.0.0:12345 --storage.path=/var/lib/alloy/data \
/etc/alloy/config.alloy
Alloy的配置文件是:/etc/alloy/config.alloy,具体语法规则参加官方文档。
如果要通过systemd-journald采集Linux日志,就下载官方的安装包直接在宿主机上安装运行吧。否则大概率会因为权限和容器环境隔离问题导致日志采集失败。宿主机安装文档在这里。
Alloy的配置文件相对复杂,但是功能强大,主要就是配置各种Components。
Docker日志采集
必须把alloy用户添加到docker组中,否则discovery.docker无法正常工作
usermod -aG docker alloy
向系统日志中写入测试日志数据
logger -p user.notice "测试 journal 日志收集:Hello from console @001"
指标监控
Prometheus,运维领域的标配组件之一。
用docker启动Prometheus服务
docker run \
-d --name prometheus \
-p 9090:9090 \
-v /data/loki/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /data/loki/prometheus-data:/prometheus \
dockerhub.mirrors.abc.com/prom/prometheus
使用以下内容作为初始的配置文件:prometheus.yml
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
可视化看板
Grafana,运维领域十个看板八个是Grafana做的。
docker run -d -p 3000:3000 \
-v /data/loki/grafana-data:/var/lib/grafana \
--name=grafana \
dockerhub.mirrors.abc.com/grafana/grafana