mtail 预定为在每台机器上运行,并作为该机器上运行的多个应用程序的监视器。它以1:1的映射方式运行一个或多个程序到这些客户端应用程序。
mtail is configured with commandline flags.
The --help flag will print a list of flags for configuring mtail.
(Flags may be prefixed with either - or --)
Basic flags necessary to start mtail:
–logs 是一个逗号分隔的文件名列表,可以从中提取,但也可以多次使用,每个文件名都可以是glob模式。将命名管道作为文件名传递到此标志时,可以从中读取命名管道。
–progs 是一个目录路径包含mtail程序。程序必须要以 .mtail 为后缀
mtail 默认占用监听端口为3903,也可以通过–port 修改
mtail --progs /etc/mtail --logs /var/log/syslog --logs /var/log/ntp/peerstats
mtail将开始从当前文件结尾读取指定的日志,如果日志文件有更新时会继续读取。它将尝试正确处理通过重命名或符号链接更改而旋转的日志文件。
多次使用–logs传递与要跟踪的日志匹配的glob模式。这包括命名管道。
mtail 轮询文件系统时间设置通过参数 --poll_log_interval,不设置则默认为250ms。为新创建或删除的日志路径名提供的–log模式。
例如:
mtail --progs /etc/mtail --logs /var/log/syslog --poll_interval 250ms --poll_log_interval 250ms
mtail在运行期间累积度量和日志文件.默认情况下,每小时都会发生一次垃圾收集过程,查找过期的指标和过时的日志文件.
过时的日志文件是24小时内未读取的任何正在监视的日志。
可以在命令行上使用–expired_metrics_gc_interval和–stale_log_gc_intervalflag更改垃圾收集运行之间的间隔,它们接受与Go时间兼容的持续时间字符串。
如果您的程序故意无法解析某些日志行,那么您可能会生成大量运行时错误,这些错误通常在标准INFO级别记录,这可能会填满您的磁盘。
您可以在命令行上使用–novm_logs_runtime_errors或–vm_logs_runtime_errors=false禁用此功能,然后只能在HTTP状态控制台中看到最近的运行时错误。
如果使用卷公开应用程序容器的日志,则mtail可以作为sidecar进程运行。
docker run -d --name myapp -v /var/log/myapp myapp
创建运行,指定了卷,默认端口 3903
docker run -dP \
--name myapp-mtail \
--volumes-from myapp \
-v examples:/etc/mtail \
mtail --logs /var/log/myapp --progs /etc/mtail
优化不指定卷添加映射端口等
sudo docker run -d \
-m 512m \
--cpus=1.0 \
-p 3903:3903 \
--name myapp-mtail \
-v /var/log/zcm/nms-metrics.log:/var/log/zcm/nms-metrics.log \
-v /etc/mtail:/etc/mtail \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
dylanmei/mtail:latest --logs /var/log/zcm/nms-metrics.log --progs /etc/mtail --override_timezone=Local
编写的程序以.mtail 为后缀,放到指定的目录下,默认为/etc/mtail 目录
mtail 不会自动加载程序一旦被拉起后。如果需要动态热加载需要发送一个SIGHUP 信号在类UNIX系统。
例如,如果配置是由一个配置管理工具(如Puppet)提供的,那么当Puppet复制了一个新的配置文件时,该程序将发送一个SIGHUP
exec { 'reload_mtail_programmes':
command => "killall -HUP mtail",
refreshonly = True,
}
file { mtail_programme:
source => mtail_programme,
notify => Exec['reload_mtail_programmes'],
}
然而,如果您使用scp或其他类似方法在没有接收器的情况下复制程序文件。然后,要么使用ssh $host 至目标主机执行“killall-HUP mtail”,要么在mtail旁边的侧进程中使用inotifywait之类的工具来监视更改并发送重载信号。
inotifywait -m /etc/mtail/progs | while read event; do killall -HUP mtail; done
将收集工具指向localhost:3903/json以获取json格式度量。
Prometheus可以指向Prometheus-text-based格式的/metrics端点。
使用collectd_socketpath或graphic_host_port标志启用推送到collectd或graphite实例。
在同一台机器上配置collectd以使用unixsock插件,并将collectd_socketpath设置为该unix套接字。
mtail --progs /etc/mtail --logs /var/log/syslog,/var/log/rsyncd.log --collectd_socketpath=/var/run/collectd-unixsock
将graphic_host_port设置为carbon 服务器的host:port。
mtail --progs /etc/mtail --logs /var/log/syslog,/var/log/rsyncd.log --graphite_host_port=localhost:9999
Likewise, set statsd_hostport to the host:port of the statsd server.
同样,将statsd_hostport设置为statsd服务器的host:port。
此外,标志metric_push_interval_seconds可用于配置推送频率。默认值为60,即每分钟推一次。
–override_timezone标志设置mtail用于时间戳转换的时区。默认情况下,mtail假定时间戳为UTC。
要使用计算机的本地时区,可以使用–override_timezone=local。