编写自动化脚本部署Promtail+Loki+Grafana轻量级日志系统

It may or may not be worthwhile, but it still has to be done.

随机引文生成自fortunes-zh包

头图参数:

parameters
<lora:pixelartV3:0.5:1:lbw=TT>, pixel art, from side, summer, wind, cloud, blue sky, flowers, solo, fox girl, white long hair, hair tie, yellow eyes, loli, sleepy,
Negative prompt: verybadimagenegative_v1.3
Steps: 30, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 3245454764, Size: 960x544, Model hash: 83bab8631c, Model: notsoxjbmix1_nsx15, VAE hash: f921fb3f29, VAE: anythingModelVAEV40_v10.pt, Denoising strength: 0.7, ControlNet 0: "Module: none, Model: control_v11p_sd15_openpose [cab727d4], Weight: 1, Resize Mode: Crop and Resize, Low Vram: False, Processor Res: 512, Guidance Start: 0, Guidance End: 1, Pixel Perfect: False, Control Mode: Balanced, Hr Option: Low res only, Save Detected Map: True", Hires upscale: 2, Hires upscaler: R-ESRGAN 4x+ Anime6B, Lora hashes: "pixelartV3: dddc3a1c5d5c", TI hashes: "verybadimagenegative_v1.3: d70463f87042", Version: v1.7.0

9分52秒……要换张新显卡了……

本文默认使用一下环境与包:

  • Ubuntu 20.04 LTS / Ubuntu 22.04 LTS / Debian 12.4 / Debian 12.5 / CentOS 7 / CentOS 8 Stream / AnolisOS 8.6
  • Loki 2.9.8
  • Promtail 2.9.8
  • Grafana v10.3.3

1. 组件相关介绍

Loki,就像是Prometheus,不过是用于log的,这是其官网的介绍。无论是维护还是应用异常收集,观看日志都是能获取重要信息的方式,但跳到机器上一个一个看具体的文件肯定是不方便,而各应用日志自身不聚合的话,很可能关联应用的重要错误log会在出错很久之后才被找出来。与ELK相比,这套组件有着更好的与Grafana的适配性(是Grafana Lab所属的项目),更低的资源要求(直接压缩储存,仅索引源数据),更方便的部署方式(都是go二进制包,写好配置文件开箱即用),非常适合做资源不宽裕的前提下进行低需求的日志聚合查询功能。

本文仅介绍部署与一个制作观看sshd失败登陆记录Dashboard的示例流程。

2. 部署架构

很多时候很多产品的架构图都可以画相当复杂的导图,但在loki这里,在不涉及k8s与对象储存的前提下,它的架构非常简单:

日志文件→Promtail收集端→Loki服务端→Grafana前端

仅此而已。

3. Promtail与Loki的部署

如上面所说,promtail与loki都是开箱即用的,两者的github包都是zip下一个二进制go文件而已。只需要按项目中的配置文件修改为自己需要的,然后使用-config.file参数指定配置文件即可,当然如果你愿意也可以把节点参数键值对当作启动命令。

顺带吐个槽:loki的–help是真够长的,不过由于包里不带默认的config文件,多少也有点合理了——不是,用户也是会看文档的啊。

这里写了两个简单的尽量少对外暴露的部署脚本,可以实行一键部署:

Loki的部署文件 Promtail的部署文件

此部署脚本会将两者的文件都储存在/data目录之下,此路径可配置,具体细节可使用-h;–help命令查看。

Loki的部署(在监控主机上部署,需要开放监听端口的入向流量)

# 此处的IP为你监听的网卡IP,0.0.0.0代表监听所有来源
# 有的系统镜像没有unzip的需要使用yum或者apt安装一下unzip

IP=0.0.0.0
bash <(curl -sL https://raw.githubusercontent.com/kurenai-li/monitors-init/main/loki_init.sh) -u "https://github.com/grafana/loki/releases/download/v2.9.8/loki-linux-amd64.zip" --ip="$IP" --

需要注意的是Loki与Prometheus不同,不能自行指定文件作为basic_auth配置文档,如果想要给Loki客户端加上验证,需要在前面套上一层反向代理,并在反向代理中配置验证。在这里以nginx为例,对外网放出13100端口并以basic_auth加密:

Nginx
# 此处passwd文件中的basic_auth用户/密码对使用httpd-tools(yum)或apache2-utils(apt)包中的htpasswd命令生成,格式为user:pass
server {
    listen 13100;
    server_name localhost;
    auth_basic "secret";
    auth_basic_user_file /etc/nginx/conf.d/passwd;
    location / {
        proxy_set_header Upgrade $http_upgrade;   #升级协议头
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Client-IP $http_x_forwarded_for ;
        proxy_pass http://localhost:3100;
    }
}

Promtail的部署(在每台主机上部署,需要开放到监控主机监控端口的出向流量)

# 需要注意此处的auth参数为你配置的加密前的user,pass对,而非htpasswd加密后的,如果没有配置basic_auth,那么可以去掉auth参数
# 此脚本默认配置仅监控主机journal日志
# 有的系统镜像没有unzip的需要使用yum或者apt安装一下unzip

IP=$lokihost:13100
bash <(curl -sL https://raw.githubusercontent.com/kurenai-li/exporters-init/main/promtail_init.sh) -u "https://github.com/grafana/loki/releases/download/v2.9.8/promtail-linux-amd64.zip" --ip="$IP" --auth="user,pass" --

4. 使用Grafana链接Loki并创建筛选sshd服务登录失败日志的Dashboard

打开Grafana的web端口,点击添加新连接,选择Loki→添加新数据源

输入对应loki的相关参数:

点击页面最下方的保存&测试,通过即代表连接成功。

然后进入探索标签,输入以下表达式,配置时间,点击运行查询:

{unit="ssh.service"} |= `nvalid user`

就可以查询到错误用户登陆失败的ip记录了:

点击右上角的添加到仪表盘将之加入添加到仪表盘并保存,就可以从仪表盘选项进入了:

由于使用了fail2ban,所以显示的攻击数并不太多,下一篇文章写下fail2ban的部署与使用吧。

5. 参考文章

  1. [Testing – Bookworm] [Solved] Where is the system log? — debia论坛
  2. where is /var/log/messages — stackexchange
  3. Promtail support for journalctl / systemd and syslog — github
  4. Promtail Scraping (Service Discovery) — github
  5. Day22 Promtail(一) 清楚的標記 Log 並送到 Loki 上吧 — ithome
  6. Promtail: “open /var/log/boot.log: permission denied” — grafana官网


已发布

分类

,

来自

标签: