Grafana、Prometheus、mtail-日志监控
一:日志如何监控
在上一篇博客Grafana、Prometheus-监控平台中,简单了解了Grafana与Prometheus对项目做特定的监控打点,可视化的配置操作。
但是对于没有设置监控或者不容易进行监控的遗留应用程序,有时重写、修补或重构该应用程序以暴露内部状态的成本绝对不是一项有利的工程投资,
或者还可能存在监控上的技术限制。但是你仍然需要了解应用程序内部发生的情况,最简单的方法之一是调整日志输出。
就例如在我的另一篇博客 分布式调度任务-ElasticJob 中遇到的bug,com.dangdangelastic-job中间件会出现一直在选主,导致业务程序执行不下去的问题,
日志会一直在打印 LeaderElectionService [traceId=] - Elastic job: leader node is electing, waiting for 100 ms at server '192.168.0.6',
像这种问题就很难通过业务打点去监控,因此就需要监控业务系统的日志文件,进而去监控系统是否出问题。
网上对于业务日志的监控,我比较过这三个
1:ELK-“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。
Elasticsearch 是一个搜索和分析引擎。
Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。
Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
2:Loki,Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。
3:mtail :它是一个google开发的日志提取工具,从应用程序日志中提取指标以导出到时间序列数据库或时间序列计算器,
用途就是: 实时读取应用程序的日志、 再通过自己编写的脚本进行分析、 最终生成时间序列指标。
工具适合自己的才是最好的,无论是ELK还是Loki都是功能齐全的日志采集系统,当然它们也有各自的优势,
但是因为本人当前只是为了采集生产日志中的一个error,所有并不想去安装配置多个基建,因为才采用最简单的mtail。
二:mtail 安装启动
下载地址:https://github.com/google/mtail/releases
安装:
chmod 0755 mtail
sudo cp mtail /usr/local/bin
编写监控脚本
touch /etc/mtail/Elastic_job_electing_count.mtail
内容如下:
counter elastic_job_electing_count
/leader node is electing, waiting for 100 ms at server/ {
elastic_job_electing_count ++
}
统计 “leader node is electing, waiting for 100 ms at server” 出现的次数。
当然mtail支持的脚本语法还是比较全的,可以参考:https://github.com/google/mtail/blob/main/docs/Programming-Guide.md
运行:
sudo mtail --progs /etc/mtail --logs '/var/log/*.log'
第一个参数--progs告诉mtail在哪里找到我们的程序,第二个参数--logs告诉mtail在哪里找到要解析的日志文件。
我们使用glob模式(https://godoc.org/path/filepath#Match)来匹配/var/log目录中的所有日志文件。
你可以指定以逗号分隔的文件列表,也可以多次指定--logs参数。
参数详解:控制台运行 mtail --help
下面列举几个简单的参数
参数 描述
-address 绑定HTTP监听器的主机或IP地址
-alsologtostderr 记录标准错误和文件
-emit_metric_timestamp 发出metric的记录时间戳。如果禁用(默认设置),则不会向收集器发送显式时间戳。
-expired_metrics_gc_interval metric的垃圾收集器运行间隔(默认为1h0m0s)
-ignore_filename_regex_pattern 需要忽略的日志文件名字,支持正则表达式。
-log_dir mtail程序的日志文件的目录,与logtostderr作用类似,如果同时配置了logtostderr参数,则log_dir参数无效
-logs 监控的日志文件列表,可以使用,分隔多个文件,也可以多次使用-logs参数,也可以指定一个文件目录,支持通配符*,指定文件目录时需要对目录使用单引号。如:
-logs a.log,b.log
-logs a.log -logs b.log
-logs ‘/export/logs/*.log’
-logtostderr 直接输出标准错误信息,编译问题也直接输出
-override_timezone 设置时区,如果使用此参数,将在时间戳转换中使用指定的时区来替代UTC
-port 监听的http端口,默认3903
-progs mtail脚本程序所在路径
-trace_sample_period 用于设置跟踪的采样频率和发送到收集器的频率。将其设置为100,则100条收集一条追踪。
-v v日志的日志级别,该设置可能被 vmodule标志给覆盖.默认为0.
-version 打印mtail版本
程序启动后默认监听3903端口,可以通过http://ip:3903访问,metrics可以通过http://ip:3903/metrics访问
三:配置Prometheus数据源
Prometheus的安装部署见:Grafana、Prometheus-监控平台
vim prometheus-config.yml
# 全局配置
global:
scrape_interval: 15s
evaluation_interval: 15s scrape_configs:
# 监控mtail日志
- job_name: 'mtail'
static_configs:
- targets: ['内网ip:3903']
重启Prometheus后,在grafana大盘里新增一个新的panel,再为其配置已经设置好的datasource

至此,一个简单去监控业务系统日志中,出现某段日志的统计就实现了, 然后再为其配置一个告警规则,并发送钉钉或邮件,就可以方便及时的处理线上的问题了。
Grafana、Prometheus、mtail-日志监控的更多相关文章
- Grafana+Prometheus通过node_exporter监控Linux服务器信息
Grafana+Prometheus通过node_exporter监控Linux服务器信息 一.Grafana+Prometheus通过node_exporter监控Linux服务器信息 1.1nod ...
- 基于grafana+prometheus构建Flink监控
先上一个架构图 Flink App : 通过report 将数据发出去 Pushgateway : Prometheus 生态中一个重要工具 Prometheus : 一套开源的系统监控报警框架 ...
- Grafana+Prometheus实现Ceph监控和钉钉告警-转载(云栖社区)
获取软件包 最新的软件包获取地址 https://prometheus.io/download/ Prometheus 1.下载Prometheus $ wget https://github.com ...
- Docker系列——Grafana+Prometheus+Node-exporter服务器监控平台(一)
在最近的博文中,都是介绍监控平台的搭建,其实并不难,主要是需要自己动手操作,实践一番就会了. 有天在想,云上的服务器,是不是也可以搭建一个监控平台,所以就捣鼓了一下,不过遗憾的是,使用阿里云开源的插件 ...
- Grafana+Prometheus打造springboot监控平台
1. 环境 springboot 1.5.10.RELEASE Grafana 5.4.2 Prometheus 2.6.0 jdk 1.8 2.通过micrometer与springboot应用和p ...
- Docker系列——Grafana+Prometheus+Node-exporter钉钉推送(四)
近期搭建的服务器监控平台,来进行一个总结.主要分为监控平台的搭建.告警中心的配置以及消息的推送.推送的话,支持多种终端.具体详细可查看之前的博文,在这里罗列下,方便查看. Docker系列--Graf ...
- Grafana+Prometheus打造全方位立体监控系统
前言 本文主要介绍如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控.下面两张图分别是两台服务器监控信息: 服务器A 服务器B 概述 Promet ...
- Grafana+Prometheus系统监控之MySql
架构 grafana和prometheus之前安装配置过,见:Grafana+Prometheus打造全方位立体监控系统 MySql安装 MySql的地位和重要性就不言而喻了,作为开源产品深受广大中小 ...
- Grafana+Prometheus系统监控之webhook
概述 Webhook是一个API概念,并且变得越来越流行.我们能用事件描述的事物越多,webhook的作用范围也就越大.Webhook作为一个轻量的事件处理应用,正变得越来越有用. 准确的说webho ...
- 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库
一.背景 在平时开发过程当中需要针对 MySQL 数据库进行监控,这里我们可以使用 Grafana 和 Prometheus 来实现监控功能.Grafana 是一款功能强大的仪表盘面板,支持多种数据源 ...
随机推荐
- Apollo 自动驾驶开发套件(D-KIT)
Apollo 自动驾驶开发套件(D-KIT)
- 目标检测数据集The Object Detection Dataset
目标检测数据集The Object Detection Dataset 在目标检测领域,没有像MNIST或Fashion MNIST这样的小数据集.为了快速测试模型,我们将组装一个小数据集.首先,我们 ...
- fiddler选项卡-Composer(构建请求)
Composer Composer支持手动构建http.https和ftp请求.点到composer选项卡界面,我们可以看到下面有一串英文. use this page to compose a Re ...
- CLR里的MethodTable,MethodDescChunk,MethodDesc,FixUpPreCode都是什么意思
一:看下面一些概念 1MethodTable MethodTable可以说在CLR里面无处不在,这个东西主要是作为对象的数据类型存在,主要包含了EEClass 模块地址,类型名称,模块路径等. 2.E ...
- 如何避免Nginx将url decode
灵感来自:https://my.oschina.net/jastme/blog/528541 这是最近玩微服务架构遇到的一个情况,因为Spring Boot 1.5的网关不支持websocket的转发 ...
- linux命令基础(一课)
一.Linux命令基础 1.shell Linux系统中运行的一种特殊程序 在用户和内核之间充当'翻译官' 用户登录Linux系统时,自动加载一个shell程序 bash是Linux系统中默认使用的s ...
- Vue——v-for动态绑定id的问题
问题:在Vue中,会遇到许多个多选框,倘若数量很庞大那么一个一个input框.label节点寻找,这样操作很繁琐. 直接上解决方案吧: html页面: <ul v-for="(item ...
- XML从入门到深入(超详细)
一:什么是XML XML (eXtensible Markup Language)指可扩展标记语言,标准通用标记语言的子集,简称XML.是一种用于标记电子文件使其具有结构性的标记语言. XML可以标记 ...
- 学习JDK源码(二):Integer
最近没有好好保持学习的好习惯,该打. 天天忙,感觉都不知道在干嘛.真的厌倦了普通的Java代码,还是想学点新技术. 用了这么久的Java,最常用的数据类型肯定是Int了,而他的包装类Integer用的 ...
- VScode如何设置模板字符串html标签自动补全
在学习Vue的过程中,很多时候都需要用到模板字符串,但是里面的html标签一个字符一个字符的去敲未免也太麻烦了吧,其实我们可以通过设置来实现在模板字符串中按Tab键快速补全html标签. 1.在VSC ...