By烟花易冷

Grafana Loki 采集 Caddy Server 站点日志
2021-12-04

提起日志收集,ELK 可谓是如日中天,但是对于一个小网站、小博客而言,ELK 中的 E(ElasticSearch) 实在是太霸道了,没有 8G 内存的服务器根本不敢安装。而后起之秀 Loki 因为不对所有字段建立索引的缘故,占用资源比较小,对小项目/小服务比较友好。

关于 Loki 的配置,我曾在公司内部 Wiki 上做过详细分享,只可惜版权问题不能直接搬运。这里分享一套我给大学时期的项目部署轻量型日志系统 Loki 的过程,这个项目将 PHP 作为了 运营后台的后端 以及 部分微服务 的编程语言,与我目前这个 WordPress 博客站点部署方式一致,希望对大家有所帮助。

安装 Caddy 并配置站点

可以参考上一篇文章,这里不做赘述。

caddy 的配置中,指定日志文件输出路径与格式。

www.zzfly.net {
	root * /data/services/zzfly-net
	php_fastcgi 127.0.0.1:9000
	file_server
	try_files {path} {path}/ /index.php/?{path}?{query
	log {
                format json
                output file /data/logs/zzfly-net.log {
                        roll_size 200mb
                        roll_keep 30
                }
        }
}

安装 Promtail 进行日志采集

Promtail 负责对原始日志文件进行采集,这里采用 docker 进行安装:

# 下载官方的配置文件
wget https://raw.githubusercontent.com/grafana/loki/v2.3.0/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml

# 启动 Promtail 容器,并把 Caddy 的日志目录 /data/logs/ 挂在到容器内
docker run -v $(pwd):/mnt/config --name promtail -v /data/logs/:/data/logs grafana/promtail:2.3.0 -config.file=/mnt/config/promtail-config.yaml

其中配置文件可以参考如下,http://loki:3100/loki/api/v1/push 是本例中的 Loki 收集接口地址,我这里自己搭建了 docker 的网桥,如果懒得话可以直接输入外网 ip 走外网推送日志在量不大的情况下也是可以的。

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: caddy
  static_configs:
  - targets:
      - localhost
    labels:
      job: caddy_http
      __path__: /data/logs*

安装 Loki 对日志进行收集

Loki 将来自 Promtail 的日志保存下来。并提供查询功能。同样的采用 docker 进行安装:

# 下载官方的配置文件
wget https://raw.githubusercontent.com/grafana/loki/v2.3.0/cmd/loki/loki-local-config.yaml -O loki-config.yaml

# 启动 loki 容器,并把 3000 端口映射至宿主机
docker run -v $(pwd):/mnt/config -d --name loki -p 3100:3100 grafana/loki:2.3.0 -config.file=/mnt/config/loki-config.yaml

在配置方面, 官方的配置文件基本不用动,保持默认即可

安装 Grafana 进行日志查看

Grafana 常被用来做 Metric (指标)型的看板,支持多个数据源,自然也支持自家的 Loki。这里采用 Grafana 对日志进行汇总与检索,同样采用 docker 进行部署:

docker run -d --name grafana -p 3000:3000 \
    -e GF_INSTALL_PLUGINS="grafana-clock-panel:1.1.0,grafana-kubernetes-app,worldpring=https://github.com/raintank/worldping-app/releases/download/v1.2.6/worldping-app-release-1.2.6.zip" \
    bitnami/grafana:latest

安装完成后访问 ip:3000 端口,设置默认用户以及密码,添加 Loki 数据源(默认为 ip:3100)即可,全程可视化操作。

效果如图:

行文仓促,仅做笔记,未覆盖到的细节勿怪。