正文共:2119字
预计阅读时间:6分钟
做过运维的同学都知道,服务的可观测性是一个非常重要的渠道,能够让我们掌控线上服务运行时的状态。一个好的监控系统,其价值在于一旦出现故障能够让我们运维的同学能够快速收到服务异常的通知以及定位问题。也就是我们常说的告警的两大衡量指标,即实时性和有效性。
1
Loki 的鸡汤
那么,今天小白请出第一个云原生里负责日志存储的便是Loki。这里可能有同学就说了:"我的日志存储和分析一直用elasticsearch也可以啊,为什么要用Loki"。别急,等小白慢慢说道说道
- 首先Loki采用Golang开发,相比ES,Loki它更加轻量也更容易部署
- 其次Loki仅索引日志的元数据部分,日志部分全部压缩存储,这样在方便操作的同时又节能节省我们存储空间
- Loki采用和Prometheus一样的标签建立索引,这意味我们可以通过标签将metrics和logging监控数据联动起来
另外Loki也是由三部分构成,分别是负责采集的Promtail、负责存储的Loki和负责展示的Grafana。这里又有同学要问了:"我自己有了日志采集客户端了,难道还要再加一个Promtail吗?"。其实不然,Loki的日志收集有四种方法,除了Promtail外,还可以使用 Fluentd
、 FluentBit
和 DockerDriver
的方式。
今天,小白的实践就是利用Grafana给Loki日志系统添加告警功能。
2
进入正题
假设小白认为大家已经使用上Loki并在Grafana上查询日志了。那么小白在自己的环境内操作一次通过将内核OOM的故障告警出来,向大家展示此次告警的实践。
1.小白通过标签定位到需要查看的服务,并使用关键字过滤出想要查看的日志内容
2.这时小白想看下过去一段时间内服务器上出现OOM的趋势
可以看到,这里小白的服务器每过段时间都会出现零零散散的OOM事件,那么有运维的同学就要问了:"这么多OOM怎么办,Grafana好像也没地方可以配置Loki告警啊",小白先按下不表,让我们先来看看Prometheus和Loki的查询接口:
Prometheus的查询接口
-
# 及时查询
-
$ curl 'http://localhost:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z'
-
# 范围查询
-
$ curl 'http://localhost:9090/api/v1/query_range?query=up&start=2015-07-01T20:10:30.781Z&end=2015-07-01T20:11:00.781Z&step=15s'
Loli的查询接口
-
# 及时查询
-
$ curl -G -s "http://localhost:3100/loki/api/v1/query" --data-urlencode 'query=sum(rate({job="varlogs"}[10m])) by (level)'
-
# 范围查询
-
$ curl -G -s "http://localhost:3100/loki/api/v1/query_range" --data-urlencode 'query=sum(rate({job="varlogs"}[10m])) by (level)' --data-urlencode 'step=300'
小白先问大家有没有发现点奇怪东西呢?没错!眼尖的同学可能看出来Prometheus和Loki在查询的URL上几乎一样,并且参数基本也是兼容的。那么我们可不可以将Grafana的上Loki数据源改成类Prometheus的格式呢?
答案是当然可以!事实上在Github上我们也可以找到相关的问题#1422和#1222
得益于prometheus和loki是一个开发团队出品,我们只需简单的配置一步,在数据源中添加一个Prometheus类型,并在地址栏中填写上 http://loki:3100/loki,这样我们就能通过像查询prometheus一样查询日志的趋势图了
这时候小白再创建一个pannel来查询内核的OOM趋势就可以得到如下结果:
接下来的工作,小白就是在Grafana上添加一个Alert小铃铛,让它每分钟去Loki里面查询有没有出现OOM的日志生成,如果计算出来的结果大于0,小白就让Grafana通过邮件告警出来。
配置完成后不急保存,我们先Test Rule看看是否生效。
看到 state:"ok",小白长舒一口,终于可以设置告警了
标签:查询,小白,Loki,告警,Grafana,日志 From: https://blog.51cto.com/u_15820126/5738630