mtail的核心功能
日志解析:mtail能够读取应用程序的日志文件,并通过用户定义的正则表达式和规则来解析日志内容,提取出关键信息。
指标生成:基于解析出的日志内容,mtail可以生成各种监控指标,如计数器、直方图等,这些指标能够实时反映系统的状态和性能。
数据导出:mtail支持将生成的监控指标以多种格式导出,包括HTTP上的JSON/Prometheus接口,以及collectd、StatsD和Graphite等协议的直接推送,方便与其他监控系统集成。
mtail的使用场景
微服务监控:对于没有内置监控功能的微服务,mtail可以从其日志中收集QPS、错误率等关键指标,帮助开发人员了解服务的运行状态。
遗留系统监控:在无法修改源码的老系统上,mtail提供了无侵入的监控解决方案,无需修改系统代码即可实现监控。
容器化环境监控:在Kubernetes等容器环境中,mtail可以处理Pod的日志并暴露容器级别的监控数据,帮助运维人员更好地管理容器。
mtail的优势
轻量级:mtail的设计非常轻量级,资源占用低,适合大规模部署。
灵活性:mtail支持多种配置选项和输出格式,能够适应不同的监控需求。
易用性:mtail使用简单易懂的编程语言,允许快速编写和调试监控规则。
社区支持:mtail有详细的文档和活跃的社区支持,遇到问题能得到及时的帮助。
mtail的部署
下载
wget https://github.com/google/mtail/releases/download/v3.0.0-rc51/mtail_3.0.0-rc51_Linux_x86_64.tar.gz
tar xf mtail_3.0.0-rc51_Linux_x86_64.tar.gz
cp mtail /usr/local/bin
查看mtail版本
mtail --version
mtail后台启动
nohup mtail -port 3903 -logtostderr -progs test.mtail -logs test.log &
# 默认端口是3903
查看是否启动成功
ps -aux | grep mtail
查看mtail的帮助文档
mtail -h
单日志采集
把本次操作的脚本都放到/mtail目录中
# 创建proj1,里面用于保存日志处理的规则脚本
mkdir proj1
# 在proj1里创建proj.mtail文件并写入以下内容
cat proj1.mtail
counter foo_count
/foo/{
foo_count++
}
# 创建log目录
mkdir log
# 在log中创建test1.log文件
touch test1.log
# 启动mtail
mtail -progs /mtail/proj1 -logs /mtail/log/test1.log
# 向test1.log中写入foo
echo "foo" > /mtail/log/test1.log
# 查看指标明细
curl 127.0.0.1:3903/metrics
foo_count{prog="proj.mtail"} 1 # 可以看到foo_count指标数为1了
多日志采集
# 在log目录中创建test2.log
touch test2.log
# 然后为test2.log重新创建一个指标脚本
cat proj1/proj2.mtail
counter bar_count
/bar/{
bar_count++
}
# 启动mtail
mtail -progs /mtail/proj1 -logs /mtail/log/test1.log -logs /mtail/log/test2.log
# 向test2.log写入日志
echo "bar" >> /mtail/log/test2.log
# 查看指标
curl 127.0.0.1:3903/metrics
bar_count{prog="proj2.mtail"} 2
foo_count{prog="proj1.mtail"} 0
# 向test1.log写入日志
echo "bar" >> /mtail/log/test1.log
# 查看指标
curl 127.0.0.1:3903/metrics
bar_count{prog="prog2.mtail"} 3
foo_count{prog="prog1.mtail"} 0
Categraf 操作
进入input.mtail文件夹,编辑mtail.toml并增加如下配置:
[[instances]]
progs = "/categraf-v0.2.38-linux-amd64/conf/input.mtail/proj1"
logs = ["/categraf-v0.2.38-linux-amd64/conf/input.mtail/log/test1.log"]
# override_timezone = "Asia/Shanghai"
# emit_metric_timestamp = "true" #string type
[[instances]]
progs = "/categraf-v0.2.38-linux-amd64/conf/input.mtail/proj2"
logs = ["/categraf-v0.2.38-linux-amd64/conf/input.mtail/log/test2.log"]
# override_timezone = "Asia/Shanghai"
# emit_metric_timestamp = "true" # string type
创建文件夹、文件
# 创建文件夹
mkdir {proj1,proj2,log}
# 增加规则文件
cat prog1/a.mtail
counter foo_count
/foo/ {
foo_count++
}
cat prog2/b.mtail
counter bar_count
/bar/ {
bar_count++
}
# 增加日志文件
touch {log/test1.log,log/test2.log}
使用测试模式启动
./categraf -test -inputs mtail
往test1.log写入foo日志
echo "foo" >> log/test1.log
往test2.log写入bar日志
echo "bar" >> log/test2.log
向test1.log增加bar的日志
echo "bar" >> log/test1.log