Open-Falcon-脚本推送-shell

#场景:通过脚本从增量日志中抓取ERROR级别的日志推送到open-falcon的告警列表

#增量实现原理:复制log到其他目录,用文件记录最大行数,下次再取log副本用tail -n (本次总行数-上次行数)  .log

#通过contab定时调用

#!/bin/bash

#跑批日志路径
ppbus_log_file="/opt/app/log-alarm/xxx.log"

#副本临时目录
clone_log_dir="/tmp/xxx.log"

#副本文件
clone_log_file="/tmp/xxx._log/xxx..log.bak"

#上一次日志副本的行数
pre_line=0
pre_line_file="/tmp/xxx._log/pre_line"


#当前获取日志的行数
curr_line=0

echo -------------------开始扫描ERROR级日志--------------------

#判断临时日志目录是否存在
if [ ! -d "$clone_log_dir" ]; then 
    mkdir -p "$clone_log_dir"
    echo "创建备份目录成功:$clone_log_dir"
fi

#备份
cp -rp "$ppbus_log_file" "$clone_log_file"
echo "备份成功:$clone_log_file"

#计算副本的行数
curr_line=`wc -l /tmp/xxx._log/xxx.log.bak|awk '{print $1}'`
echo "当前副本总行数:$curr_line"

if [ ! -f "$pre_line_file" ]; then
    pre_line=0
    touch "$pre_line_file"
else
    pre_line=`cat "$pre_line_file"`
fi
echo $curr_line > $pre_line_file

echo "上次副本总行数:$pre_line"

#1、如果行数都相同不处理
#2、如果历史的行数小于当时行数,说明日志新写了,需要把历史的行数清0,重新解析新的日志文件
if [ ${pre_line} = ${curr_line} ]; then
    echo "日志无更新不需要处理."
    exit 0
elif [ ${pre_line} -gt ${curr_line} ]; then
    pre_line=0
fi

let num=$curr_line-$pre_line
echo "读取日志行数:${num}"
err_msg=`tail -n $num xxx.log|grep ERROR|grep Exception|awk '{print $4 $6}'`
if [ -z "$err_msg" ]; then
    echo "日志正常,未发现指定ERROR." 
    exit 0
else
    echo "$err_msg"
fi
#
#------------------------------------------API参数解说-------------------------------------------
#metric: 最核心的字段,代表这个采集项具体度量的是什么, 比如是cpu_idle呢,还是memory_free, 还是qps
#endpoint: 标明Metric的主体(属主),比如metric是cpu_idle,那么Endpoint就表示这是哪台机器的cpu_idle
#timestamp: 表示汇报该数据时的unix时间戳,注意是整数,代表的是秒
#value: 代表该metric在当前时间点的值,float64
#step: 表示该数据采集项的汇报周期,这对于后续的配置监控策略很重要,必须明确指定。
#counterType: 只能是COUNTER或者GAUGE二选一,前者表示该数据采集项为计时器类型,后者表示其为原值 (注意大小写)
#GAUGE:即用户上传什么样的值,就原封不动的存储
#COUNTER:指标在存储和展现的时候,会被计算为speed,即(当前值 - 上次值)/ 时间间隔
#tags: 一组逗号分割的键值对, 对metric进一步描述和细化, 可以是空字符串. 比如idc=lg,比如service=xbox等,多个tag之间用逗号分割
#说明:这7个字段都是必须指定
#------------------------------------------API参数解说-------------------------------------------
#当前时间
ts=`date +%s`
for line in $err_msg
do
  echo "===============$line"
curl -X POST -d "[{\"metric\": \"mem.swapfree.percent\", \"endpoint\": \"192.168.198.133\", \"timestamp\": $ts,\"step\": 60,\"value\": 60,\"counterType\": \"GAUGE\",\"tags\": \"sqlException\"}]" http://192.168.198.133:1988/v1/push

echo -------------------------------结束扫描ERROR级日志-----------------------
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值