loki + Grafana搭建日志系统
场景:
这几天趁着机考,面试比较少,帮老师把项目的东西做一做(今年找工作太难了,┭┮﹏┭┮)。由于这个项目需要分布式部署多台服务器,多个数据库,后端程序分开部署,日志不好查找。而且每次不能及时的发现错误日志,日志不能进行报警通知等。还有就是之后师弟可能不怎么会看日志,找日志,于是搭建轻量级日志系统。
日志系统可以有很多,ELK,loki等,loki具有轻量级,查找快速,存储压缩等特点,适用于中小项目,而且这个名字太酷了。
此外,顺便记录一下grafana怎么开通告警功能,以及邮件通知
promtail安装:
promtail是loki的采集器,它负责从数据源获取日志信息,然后loki去解析和查找。
下载安装,去下方的官方git下载.zip,然后上传解压。我是centos,用amd64,如果不知道下哪个,用arch指令看一下,如果是x86_64,就amd64。
解压,就一个文件。配置文件可以通过wget下载。
unzip loki-linux-amd64.zip
// 配置文件
wget https://raw.githubusercontent.com/grafana/loki/v2.2.1/cmd/promtail/promtail-local-config.yaml
启动方式,如果想后台启动,可以看看我上篇的博客,写过了。
./promtail-linux-amd64 -config.file=promtail-local-config.yaml
配置文件大致如下:
可以看官方文档的解释,主要就添加job_name就够了,主要这里的job名字最好不能重复。clients是loki的地址,一般就改ip,端口就可以了。
如果运行起来有拒绝连接的问题,看看是不是loki没开。
loki安装,使用:
下载也是去git上下,然后解压安装。
unzip loki-linux-amd64.zip
// 下载配置文件
wget https://raw.githubusercontent.com/grafana/loki/v2.2.1/cmd/loki/loki-local-config.yaml
启动的方式差不多。
./loki-linux-amd64 -config.file=loki-local-config.yaml
这里主要配置.yaml配置文件,我没怎么改。启动起来如下。
然后去Grafana进行log查询,看一下。在Explore这,输入query,进行查询。可以通过下面的log sql进行查询。
{}里面是筛选添加,job是promtail配置中的job,filename是文件名查找,~是正则匹配的意思,后面的 | 是管道操作,就是可以在之前的结果上进行操作。因为我的日志结构如下:
-Logs(文件夹) --2022-08-24(文件夹) XXX.txt --2022-08-23 xxx.txt
所有查起来比较麻烦。然后查询结果是所有日志文件中匹配的行,要是想看这一行所在log文件的其他信息,可以:
然后可以看这行数据前10行,后10行,这样一点点看。
也可以通过log的信息,知道行所在的文件,然后去服务器上手动下载。这里的filename是/root/xxx/xxx.log这样的
不知道能不能直接解析行里的内容,要是可以的话就更直观了。
Grafana告警,邮件通知:
Grafana可以在query的基础上,添加告警规则,并通过邮件,钉钉,微信等方式进行通知,完全不用定期去看了。这里我记录一下邮件通知,之前试过钉钉通知(使用群机器人),发现没用。
先安装sendmail,用来代理邮件发送,它相当于把Grafana的邮件发给一些邮件服务器(163,qq等),由它们替我们发送邮件
yum install -y sendmail
systemctl start sendmail
lsof -i:25
可以看一下是否开启了。然后修改Grafana的配置文件,启动smtp功能。
vi /etc/grafana/grafana.ini
// 找到[server]
domain:IP地址
root_url = 外网能访问的Grafana的地址,比如http://xxx.xxx.xxx.xxx:3000 // 找到[smtp],修改 enabled = true // 是否启用 host = smtp.qq.com:25 // 用什么做代理 user = XXXX@qq.com // 自己的邮箱 # If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" password = XXX // 这里是开启SMTP服务的授权码 ;cert_file = ;key_file = skip_verify = true from_address =XXXX@qq.com // 自己的邮箱 ;from_name = Grafana
qq邮箱的授权码和STMP开启,注意保管好授权码。
之前试过用163的,当时怎么都不行,遇到了这个问题:My unqualified host name (主机名) unknown; sleeping for retry。然后没想到一用qq邮箱就行了,不是很理解。
然后去Grafana上配置一个告警规则,测试一下。添加一个通知渠道,可以通过钉钉,邮件等等。
做配置,这里的include image是是否包括图片,选上它就会有一个发来告警时的截图。下面可以选择发给哪些邮箱,send reminders是定期发送。Disable resolv message是是否发送解析的信息。
测试一下,就可以收到邮件了。正式的告警邮件其实是一个连接,和一些告警的信息。
参考:
日志系统介绍:https://blog.csdn.net/mahj125/article/details/121146795
loki下载安装:https://github.com/grafana/loki
https://blog.csdn.net/leenhem/article/details/121529910?utm_medium=distribute.pc_feed_404.none-task-blog-2~default~BlogCommendFromBaidu~Rate-3-121529910-blog-null.pc_404_mixedpudn&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-2~default~BlogCommendFromBaidu~Rate-3-121529910-blog-null.pc_404_mixedpud
log查询语句:https://grafana.com/docs/loki/latest/logql/log_queries/
发送邮件:https://blog.csdn.net/liuxiao723846/article/details/123690205
https://blog.csdn.net/wangzan18/article/details/106335774
钉钉通知:https://blog.csdn.net/owenzhang24/article/details/122233879