prometheus&mtail 监控java堆外溢出关键字OutOfDirectMemoryError

【介绍】
官网:https://github.com/google/mtail
mtail 方式监控 统计关键字个数作为告警通知,来完成错误关键字的日志告警。
监控java 堆外内存溢出 关键字:OutOfDirectMemoryError
结合promethus mtail 方式,监控报错关键字实现告警。

一、【mtail配置】

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

错误关键字统计

cat error_count.mtail ##格式 OutOfDirectMemoryError 堆外内存溢出关键字

counter error_count
/OutOfDirectMemoryError/ {
  error_count++
}

后台启动命令:

nohup /data/soft/mtail -logtostderr -progs /data/soft/error_count.mtail -logs  /data/java/nohup.out  &

##-logtostderr -progs /data/soft/error_count.mtail mtail的规则

#–logs 采集的java日志输出
2.promethues 告警配置 promethues.yml

  - job_name: 'mtail'
    static_configs:
    - targets: ['192.168.1.1:3903'] 

3.告警规则

cat /data/prom/mtail-rules.yml

groups:
  - name: mtail-alerting
    rules:
    # down了超过1分钟
    - alert: errorlog
      expr: error_count{job="mtail"} > 0 
      for: 1m
      labels:
        severity: red
      annotations:
        summary: "java has error "
        description: "java has error log more than 1min."

4.根据报警关键字,实现服务自动重启
重启脚本 restart.sh

#!/bin/bash
# java日志监控
# 1. 检索 nohup.out 日志文件中是否包含关键字
# 2. 如果包含,停止 java 服务;
# 3. 处理包含关键字的 java 日志文件;
# 4. 重新启动 java 服务。

# java 日志目录 
LogHome=/data/java
time=$(date "+%Y%m%d%H%M")
time2=$(date "+%Y%m%d")
# 需要检索的关键字
searchKeywords="OutOfDirectMemoryError"

source /etc/profile

#echo "Enter apache-tomcat server home: ${LogHome}"
# 进入  日志目录
cd ${LogHome}

# 检索关键字在目录下所有文件中出现的次数。
matchesTimes=`grep "${searchKeywords}" ./nohup.out | wc -l`

if [ $matchesTimes -gt 0 ] ; then
    # 如果出现了关键字
    echo "We find fatal logs! We will shutdown, please hold on......"
    # 检索出现关键字的文件名称数组
    errorFiles=`grep -l "${searchKeywords}" ./nohup.out`
    # 杀死进程
    ps -ef|grep javaname |grep -v grep|awk '{print $2}'|xargs kill -9
    # 进入目录,准备删除包含关键字的文件。
    mv nohup.out nohup.out$time
    # 退出到 Tomcat 根目录。
    echo "The error files was moved,restart java now, please hold on......"
    # 重启服务
    cd ${LogHome} && nohup java -Xms128m -Xmx512m -jar  javaname .jar>nohup.out 2>&1 &
    echo "$time, java was restarted" >>healthlog/$time2-log
        #重启mtail告警插件
     ps -ef|grep mtail |grep -v grep|awk '{print $2}'|xargs kill -9
    nohup /data/soft/mtail -logtostderr -progs /data/soft/error_count.mtail -logs  /data/java/nohup.out > mtail-nohup.out 2>&1 &
    echo "$time, mtail was restarted" >>healthlog/$time2-log
else
    # 没有满足条件的文件,直接退出。
    echo "$time, java is health " >>healthlog/$time2-log
    exit
fi
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值