Promtail + Loki + Grafana 构建日志监控告警系统(一)
一、前言
日志监控告警系统,我所了解的较为流行的有两种技术栈。
一种是Elasticsearch 、 Logstash和Kibana核心套件构成,简称ELK。另外一种是Promtail + Loki + Grafana核心组件构成,简称PLG。其中,ELK的技术栈方案,久经考验,很多大公司的团队在使用。相比之下,PLG开源不久,是一股新兴的力量,目前较多的小团队在使用。
经过衡量和思考,考虑到Loki轻量(ELK很多复杂的功能项目上没有使用需求)、低成本(容易实现)、操作简单等特性,以及计划使用prometheus体系对监控进行改造,我采用了第二种技术栈方案。
其实也有一丝我对Golang语言的偏爱的原因。
二、组件介绍
promtail: 日志收集的代理,安装部署在需要收集和分析日志的服务器,promtail会将日志发给Loki服务。
Loki: 主服务器,负责存储日志和处理查询。
Grafana:提供web管理界面,数据展示功能。
三、实施
本篇文章着重讲一下快速上手,对Loki有一个初体验。
为了便于部署,考虑使用docker镜像实施。首先安装一个docker服务,再把设置国内的镜像加速地址。
编辑/etc/docker/daemon.json配置文件。我使用了网易的镜像源:
{"registry-mirrors": ["http://hub-mirror.c.163.com"]}
从镜像源拉取镜像文件:
docker pull grafana/grafanadocker pull grafana/lokidocker pull grafana/promtail
启动服务:
Grafana:
docker run -d --name=grafana -p 3000:3000 grafana/grafana
Loki:
docker run -d --name=loki -p 3100:3100 grafana/loki
Promtail:
主要是配置文件、一些label的设置,初次尝试可能相对麻烦一些,熟悉了就比较容易,
promtail配置文件,可参考官方文档:https://github.com/grafana/loki/blob/v1.3.0/docs/clients/promtail/configuration.md#example-docker-config
我主要是监控freeswitch服务,以此进行配置,编辑一个promtail-docker-config.yaml文件,写入如下内容:
server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yamlclient:url: http://localhost:3100/loki/api/v1/pushscrape_configs:- job_name: voip_servicepipeline_stages:- docker:static_configs:- targets:- localhostlabels:job: freeswitch_servicehost: localhost__path__: /usr/local/freeswitch/log/freeswitch.log*
编辑一个docker-compose.yaml文件,写入内容:
version: "3"services:promtail:image: grafana/promtailcontainer_name: promtailnetwork_mode: hostvolumes:- $PWD:/etc/promtail- /usr/local/freeswitch/log:/usr/local/freeswitch/logcommand:-config.file=/etc/promtail/promtail-docker-config.yaml
执行启动命令:
./docker-compose up -d
以上步骤完成,那么Loki日志监控告警系统以及搭建完成了!
我们看一下容器,所有服务都启起来了。
下面在浏览器上打开grafana的界面,即本地的3100端口。手动添加一下数据源,数据源即Loki的地址:3000,保存完成并测试连接是否成功,这一步就不赘述了。
打开Explore窗口,选择Loki的数据源,Log lebels里面已经有freeswitch的相关选项了。
简单使用一下选择器,过滤一下某一个通话的日志内容。
大功告成,我们选择的这个通话的日志内容已经展示出来了。
后续,再展开讲述如何丰富我们的标签,更好的使用选择器和筛选器。