Mtail介绍
mtail是一种工具,用于从要导出的应用程序日志中提取指标 放入时间序列数据库或时间序列计算器中,用于警报和仪表板。简单来说,就是实时读取应用程序的日志,并且通过自己编写的脚本实时分析,最终生成时间序列指标的工具。
运行参数
参数 | 说明 |
---|---|
-address | 绑定HTTP监听器的主机或IP地址 |
-alsologtostderr | 记录标准错误和文件 |
-block_profile_rate | 绑定HTTP监听器的主机或IP地址 |
-collectd_prefix | 发送给collectd的指标的metrics前缀 |
-collectd_socketpath | collectd unixsock路径,用于向其写入metrics |
-compile_only | 仅尝试编译mtail脚本程序,不执行,用于测试脚本 |
-disable_fsnotify | 是否禁用文件动态发现机制。为true时,不会监听动态加载发现的新文件,只会监听程序启动时的文件。 |
-dump_ast | 解析后dump程序的AST(默认到/tmp/mtail.INFO) |
-dump_ast_types | 在类型检查之后dump带有类型注释的程序的AST(默认到/tmp/mtail.INFO) |
-dump_bytecode | dump程序字节码 |
-emit_metric_timestamp | 发出metric的记录时间戳。如果禁用(默认设置),则不会向收集器发送显式时间戳。 |
-emit_prog_label | 在导出的变量里面展示’prog’对应的标签。默认为true |
-expired_metrics_gc_interval | metric的垃圾收集器运行间隔(默认为1h0m0s) |
-graphite_host_port | graphite 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_dir | mtail程序的日志文件的目录,与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_seconds | metric推送时间间隔,单位:秒,默认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 | 绑 |
-address | mtail脚本程序所在路径 |
-stale_log_gc_interval | stale的垃圾收集器运行间隔(默认为1h0m0s) |
-statsd_hostport | statsd地址,格式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条收集一条追踪。 |
-v | v日志的日志级别,该设置可能被 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
部署命令
- 创建部署目录
mkdir -p /data/monitor/mtail/etc
- 编辑配置文件
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
- 启动模块
cd /data/monitor/mtail
docker-compose --compatibility -f docker-compose-mtail.yml up -d
- 查看模块状态
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 }}"
- 告警示例