Mtail日志监控输出prometheus

mtail是一个工具,用于从应用程序日志中提取指标并导入时间序列数据库。它支持自定义脚本,可以实时监控日志文件,提供HTTP接口展示指标,并能与collectd、graphite、statsd等集成。本地和容器部署方式详细说明,包括配置文件和命令行参数,以及如何与Prometheus集成进行日志关键字告警。
摘要由CSDN通过智能技术生成

Mtail介绍

mtail是一种工具,用于从要导出的应用程序日志中提取指标 放入时间序列数据库或时间序列计算器中,用于警报和仪表板。简单来说,就是实时读取应用程序的日志,并且通过自己编写的脚本实时分析,最终生成时间序列指标的工具。

官网地址
下载地址

运行参数

参数说明
-address绑定HTTP监听器的主机或IP地址
-alsologtostderr记录标准错误和文件
-block_profile_rate绑定HTTP监听器的主机或IP地址
-collectd_prefix发送给collectd的指标的metrics前缀
-collectd_socketpathcollectd unixsock路径,用于向其写入metrics
-compile_only仅尝试编译mtail脚本程序,不执行,用于测试脚本
-disable_fsnotify是否禁用文件动态发现机制。为true时,不会监听动态加载发现的新文件,只会监听程序启动时的文件。
-dump_ast解析后dump程序的AST(默认到/tmp/mtail.INFO)
-dump_ast_types在类型检查之后dump带有类型注释的程序的AST(默认到/tmp/mtail.INFO)
-dump_bytecodedump程序字节码
-emit_metric_timestamp发出metric的记录时间戳。如果禁用(默认设置),则不会向收集器发送显式时间戳。
-emit_prog_label在导出的变量里面展示’prog’对应的标签。默认为true
-expired_metrics_gc_intervalmetric的垃圾收集器运行间隔(默认为1h0m0s)
-graphite_host_portgraphite carbon服务器地址,格式Host:port。用于向graphite carbon服务器写入metrics
-graphite_prefix发送给graphite指标的metrics前缀
-ignore_filename_regex_pattern需要忽略的日志文件名字,支持正则表达式。使用场景:当-logs参数指定的为一个目录时,可以使用ignore_filename_regex_pattern 参数来忽略一部分文件
-jaeger_endpoint如果设为true,可以将跟踪导出到Jaeger跟踪收集器。使用–jaeger_endpoint标志指定Jaeger端点URL
-log_backtrace_at当日志记录命中设置的行N时,发出堆栈跟踪
-log_dirmtail程序的日志文件的目录,与logtostderr作用类似,如果同时配置了logtostderr参数,则log_dir参数无效
-logs监控的日志文件列表,可以使用,分隔多个文件,也可以多次使用-logs参数,也可以指定一个文件目录,支持通配符*,指定文件目录时需要对目录使用单引号。如:-logs a.log,b.log,c.log -logs a.log -logs b.log -logs c.log -logs ‘/export/logs/*.log’
-logtostderr直接输出标准错误信息,编译问题也直接输出
-metric_push_interval_secondsmetric推送时间间隔,单位:秒,默认60秒
-metric_push_write_deadline在出现错误退出之前等待推送成功的时间。(默认10s)
-mtailDebug设置解析器debug级别
-mutex_profile_fraction报告的互斥锁争用事件的分数。0关闭。(此参数为直译,不太理解啥意思)
-one_shot此参数将编译并运行mtail程序,然后从指定的文件开头开始读取日志(从头开始读取日志,不是实时tail),然后将收集的所有metrics打印到日志中。此参数用于验证mtail程序是否有预期输出,不用于生产环境。
-override_timezone设置时区,如果使用此参数,将在时间戳转换中使用指定的时区来替代UTC
-poll_interval设置轮询所有日志文件以获取数据的间隔;必须为正,如果为零将禁用轮询。使用轮询模式,将仅轮询在mtail启动时找到的文件
-port监听的http端口,默认3903
-progs
-addressmtail脚本程序所在路径
-stale_log_gc_intervalstale的垃圾收集器运行间隔(默认为1h0m0s)
-statsd_hostportstatsd地址,格式Host:port。用于向statsd写入metrics
-statsd_prefix发送给statsd指标的metrics前缀
-stderrthreshold严重性级别达到阈值以上的日志信息除了写入日志文件以外,还要输出到stderr。各严重性级别对应的数值:INFO—0,WARNING—1,ERROR—2,FATAL—3,默认值为2.
-syslog_use_current_year如果时间戳没有年份,则用当前年替代。(默认为true)
-trace_sample_period用于设置跟踪的采样频率和发送到收集器的频率。将其设置为100,则100条收集一条追踪。
-vv日志的日志级别,该设置可能被 vmodule标志给覆盖.默认为0.
-version打印mtail版本
-vmodule按文件或模块来设置日志级别,如:-vmodule=mapreduce=2,file=1,gfs*=3

配置文件说明

配置文件
error_count.mtail #错误关键字统计配置文件
ine_count.mtail #关键字统计配置文件

本地部署

1.创建部署目录

mkdir -p /data/monitor/mtail/{etc,bin}

2.下载安装

cd  /data/monitor/mtail/bin
wget https://gh.api.99988866.xyz/https://github.com/google/mtail/releases/download/v3.0.0-rc51/mtail_3.0.0-rc51_Linux_x86_64.tar.gz
tar zxf  mtail_3.0.0-rc51_Linux_x86_64.tar.gz
chmod +x mtail
cp mtail   /usr/bin

3.创建配置文件

cd  /data/monitor/mtail/etc
vim error_count.mtail
counter failed_count
/需要监控的关键字/ {
 failed_count++
 }

4.启动

nohup mtail  --progs /data/monitor/mtail/etc --logs  '/data/cc/logs/*.log'  &

–progs 配置文件位置
–logs 日志文件位置
注意: --logs需要定位到日志文件的上级目录,不会探测下级目录只探测当前目录

停止命令

Pkill -9 mtail

查看进程是否存在

Ps -ef | grep mtail

5.查看监控指标输出

 curl http://127.0.0.1:3903
 curl http://127.0.0.1:3903/metrics

容器部署

镜像制作

1.下载mtail主程序

wget https://gh.api.99988866.xyz/https://github.com/google/mtail/releases/download/v3.0.0-rc51/mtail_3.0.0-rc51_Linux_x86_64.tar.gz

2.创建dockerfile文件

vim Dockerfile
FROM centos:7                   #引用的基础镜像
ADD mtail /usr/bin              #向镜像中添加文件
RUN chmod +x /usr/bin/mtail     #构建时运行的命令     
ENTRYPOINT ["/usr/bin/mtail"]   #容器启动时运行的命令         

3.构建镜像

docker build -t mtail:v3 .

4.打包镜像

docker save mtail:v3 > mtail:v3.tar.gz

部署命令

  1. 创建部署目录
mkdir -p /data/monitor/mtail/etc
  1. 编辑配置文件
vim  /data/monitor/mtail/etc/error_count.mtail

counter failed_count
/需要统计的关键字/ {
 failed_count++
 }

3.创建docker-compose文件

vim  /data/monitor/mtail/docker-compose-mtail.yml
version: '3'
services:
  mtail:
    container_name: "mtail"
    image: mtail:v3
    restart: unless-stopped
    deploy:
      resources:
         limits:
            cpus: "0.50"           #限制容器最大使用CPU
            memory: 512M           #限制容器最大使用内存
         reservations:
            cpus: "0.25"
            memory: 128M
    command:
      - '--progs=/etc/mtail/'
      - '--logs=/logs/log.log' #指定日志文件(可修改为'*.log'或'xx.log')
    volumes: 
      - ./etc/:/etc/mtail/     #配置文件位置
      - /var/logs:/logs/       #需要探测的日志目录(不支持上下级,只探测当前目录)
    ports:
      - "3903:3903"

说明:
/var/logs 为本地需要探测的日志目录,后边为固定目录不可修改
/logs/pop.log 为指定需要探测的日志文件,可修改为指定文件或*.log

  1. 启动模块
cd /data/monitor/mtail
docker-compose --compatibility  -f docker-compose-mtail.yml up -d
  1. 查看模块状态
docker  ps |grep mtail

无重启状态则为正常
[图片]
6.查看监控指标输出

 curl http://127.0.0.1:3903
 curl http://127.0.0.1:3903/metrics

prometheus添加Mtail数据源

添加prometheus配置项

cd /data/monitor/config/prometheus/modules/
vim mtail.yml
- labels:
    service: "cc"
    env: "production"
  targets:
  - IP:3903
cd /data/monitor/config/prometheus
vim  prometheus.yml
# 添加以下内容
   - job_name: 'mtail'
    scrape_interval: 5s
    file_sd_configs:
    - files:
      - 'modules/mtail.yml'
      refresh_interval: 5s

重载prometheus配置

curl -X POST http://ip:39090/-/reload

添加告警(当日志中包含某个关键字的个数等于多少时则触发告警)

ProSQL查询日志中包含的关键字个数 sum (failed_count{job=‘mtail’})
告警条件

((failed_count{job='mtail'}) - (failed_count{job='mtail'} offset 10m))   > 1

说明:十分钟内日志中包含关键字个数大于1则进行告警
判断日志中包含的错误关键字个数,由于error_count是个计数器无法进行数据清空,所以对比十分钟前的数据推算出出现关键字的个数,故十分钟内不处理告警不会进行第二次告警,除非日志中出现新的关键字
如需清空统计个数需重启mtail程序。

cd /data/monitor/config/prometheus/roles/
vim  host.yml 
  - alert: 日志关键字
    expr: ((failed_count{job='mtail'}) - (failed_count{job='mtail'} offset 30m))   > 1
    for: 5s
    labels:
      severity: ERROR
      service: "Mtail-warning"
    annotations:
      summary: "日志关键字告警"
      description: "日志包含告警关键字xxx个数大于1"
      value: "{{ $value }}"
  • 告警示例
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值