mtail 是谷歌開源的一款很不錯的應用日志提取工具,我們可以方便的用來提取應用的數據
到常見的監控系統(prometheus,stats,collectd,gragphite。。。。)
說明: demo 使用此工具轉換nginx error message 為prometheus 的metrics
環境准備
- docker-compose 文件
version: "3"
services:
nginx-log:
build: ./
ports:
- "8090:80"
- "3903:3903"
volumes:
- "./examples/linecount.mtail:/progs/linecount.mtail"
- nginx dockerfile
FROM dalongrong/mtail as builder
FROM openresty/openresty:alpine
ENV TINI_VERSION v0.18.0
RUN apk add --update \
&& apk add --no-cache tini
ADD entrypoint.sh /entrypoint.sh
ADD mtail.sh /mtail.sh
COPY nginx.conf usr/local/openresty/nginx/conf/
COPY --from=builder /usr/bin/mtail /usr/bin/
EXPOSE 80 3903
ENTRYPOINT ["/sbin/tini","-s", "--", "/entrypoint.sh"]
- entrypoint shell
#!/bin/sh
sh mtail.sh
exec /usr/local/openresty/bin/openresty -g "daemon off;"
mtail.sh:
#!/bin/sh
nohup /usr/bin/mtail -logtostderr -progs /progs/linecount.mtail -logs /var/log/error.log &
- nginx log 配置
nginx.conf
+ error_log /var/log/error.log error;
+ user root;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
resolver 114.114.114.114;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
+ access_log /var/log/access.log main;
- metric 腳本
counter line_count
/$/ {
line_count++
}
- 說明
mtail 鏡像是自己構建的,使用代碼中的dockerfile
啟動&&測試
- 構建鏡像
docker-compose build
- 啟動
docker-compose up -d
- 生成錯誤日志
訪問不存在的地址即可, open http://localhost:8090/eeeee - mtail 生成的metrics api
open http://localhost:3903/ - 效果

prometheus metrics 效果
說明
這個demo很簡單,但是實際上mtail 可以做好多很方便的事情,對於我們搞微服務以及devops,監控平台是一個很不錯的工具
參考資料
https://github.com/google/mtail/blob/master/docs/Building.md
https://github.com/rongfengliang/mtail-nginx-docker-compose-demo
