视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
怎么将win10系统教育版更变回专业版 win10应用商店如何申请退款 在哪关闭win10快速启动 怎样解决win10底部任务栏无响应的问题 如何关闭win10企业版的自动更新服务 win10系统excel表格进行排序的方法 怎样给win10系统进行系统恢复 冰冻的包子需要解冻后再蒸吗 如何设置win10系统自动更新 青春浙江微信公众号怎么关注 雷公菌怎么清洗更快 如何在微信头像旁备注姓名 怎样删除快手退款记录 纯胡麻油可以高温炒菜吗 大姨妈漏床上怎么快速弄掉 站着淋浴怎么洗头 抖音火山版怎么发长视频 和面酵母放多了怎么办 面放冰箱里了一夜没发怎么办 白色衣服洗后变淡红色 UEditor编辑器怎么关闭远程图片抓取功能 长城宽带账号密码忘记了怎么办 怎么知道包子蒸熟了 怎样升级win10专业版系统 怎么在钉钉里表格使用在线编辑 怎么洗掉衣服上的墨水污渍 怎么开通卖家运费险 在ins上怎么找到原图 洗衣机下水管堵塞怎么疏通 无线网卡连不上网怎么办 微软密码忘记了怎么办 淘宝店铺名改不了怎么回事 苏泊尔电压力锅盖不上盖怎么回事 油漆弄到手上如何清洗 新鲜鱿鱼怎么晒鱿鱼干 新平底锅第一次用怎么处理 如何关闭win10家庭版强制更新 晓黑板打不开了怎么办 小度怎么投屏电视 淘宝卖家运费险在哪里取消
python怎么实时监控logstash日志
2021-11-09 04:20:00 责编:小OO
文档

第一步,实时读取logstash日志,有异常错误keywork即触发报警。

# /usr/bin/env python3
# -*- coding: utf-8 -*-
# __author__ = caozhi
# create_time 2018-11-12,update_time 2018-11-15
# version = 1.0
# 录像高可用报警
# 1 读取日志 使用游标移动
# 2 线上业务日志文件会切割,切割后,读取上一个切割的日志

import os
import sys
import json
import requests
import time
import re

cini = conf.ini'
log_file = logstash.log'

def readconf():
 try:
 with open(cini, 'r+') as f:
  CONF = json.load(f)
 except:
 CONF = {"seek": 0, "inode": 922817, "last_file": logstash.log"}
 writeconf(CONF=CONF)
 print('conf.ini 配置文件缺失,自动创建一个新的配置文件')
 return CONF

def writeconf(CONF):
 with open(cini, 'w+') as e:
 json.dump(CONF, e)

def read_log(log_file, seek):
 try:
 f = open(log_file, 'r')
 except FileNotFoundError:
 f = open(logstash.log', 'r')
 seek = 0
 print('上一个文件读取失败了,请检查切割的日志文件')
 except:
 print('日志文件打开错误,退出程序')
 sys.exit()

f.seek(seek)
line = f.readline()
new_seek = f.tell()
if new_seek == seek:
 print('没有追加日志,退出程序')
 sys.exit()

while line:
 try:
 logstash = json.loads(line)
 except:
 CONF = {"seek": 0, "inode": 922817, "last_file": "/data/logs/lmrs/logstash.log"}
 writeconf(CONF=CONF)
 print('json数据加载错误,重新创建一个新的配置文件')
 sys.exit()

 #if '''re.search(time.strftime("%Y:%H:%M", time.localtime()), logstash.get('log_time')) and '''logstash.get('rtype') == 6 and logstash.get('uri') == '/publish' and logstash.get('event') == 0:
 if logstash.get('rtype') == 6 and logstash.get('uri') == '/publish' and logstash.get('event') == 0:
 value = 1
 stream = logstash.get('name')
 print('{} {}'.format(value, stream))
 record(value=value, stream=stream)
 else:
 value = 0
 stream = 0
 line = f.readline()
seek = f.tell()
f.close
return value, stream, seek

def record(value, stream):
 data = []
 record = {}
 record['metric'] = 'recording_high_availability_monitor'
 record['endpoint'] = os.uname()[1]
 record['timestamp'] = int(time.time())
 record['step'] = 60
 record['value'] = value
 record['counterType'] = 'GAUGE'
 record['Tags'] = '{}={}'.format(int(time.time()), stream)
 data.append(record)

if data:
 print('这是data的json数据')
 print(data)
 falcon_request = requests.post("http://127.0.0.1:1988/v1/push", data=json.dumps(data))
 #falcon_request = requests.post("http://127.0.0.1:1988/v1/push", json=data)
 print('json参数请求返回状态码为:' + str(falcon_request.status_code))
 print('json参数请求返回为:' + str(falcon_request.text))

if __name__ == '__main__':
 print()
 print('***************************************')
 print('本次执行脚本时间:{}'.format(time.strftime("%Y%m%d_%H%M", time.localtime())))
 CONF = readconf()
 print('first_CONF :{}'.format(CONF))
 print('NO1.log_file',log_file)
 last_inode = CONF['inode']
 inode = os.stat(log_file).st_ino
 print('last_inode: {} inode: {}'.format(last_inode, inode))

if inode == last_inode:
 seek = CONF['seek']
 next_file = 0
else:
 log_file = CONF['last_file'] + time.strftime("-%Y%m%d_", time.localtime()) + str(time.strftime("%H%M", time.localtime()))[:-1] + '0'
 next_file = 1
 seek = CONF['seek']

print('NO2.log_file',log_file)
value, stream, seek = read_log(log_file=log_file,seek=seek)

if next_file:
 CONF['seek'] = 0
else:
 CONF['seek'] = seek

CONF['inode'] = os.stat(logstash.log').st_ino
writeconf(CONF=CONF)
print('last_CONF :{}'.format(CONF))

扩展代码:logstash 调用exec

[elk@Vsftp logstash]$ cat t3.conf 
input {
 stdin {
 } 
} 
filter {
 grok {
 match => [ "message","(?m)\s*%{TIMESTAMP_ISO8601:time}\s*(?(\S+)).*"]
 }
 date {
 match => ["time", "yyyy-MM-dd HH:mm:ss,SSS"]
 }
 mutate {
   add_field =>["type","tailong"]
   add_field =>["messager","%{type}-%{message}"]
   remove_field =>["message"]
  }
} 
output { 
 if ([Level] == "ERROR" or [messager] =~ "Exception" ) and [messager] !~ "温金服务未连接" and [messager] !~ "调用温金代理系统接口错误" and [messager] !~ "BusinessException" {
 exec {
  command => "/bin/smail.pl \"%{messager}\" \"%{type}\" "
 }
 }
 stdout { 
 codec =>rubydebug 
 } 
}
 
Vsftp:/root# cat /bin/smail.pl 
#!/usr/bin/perl 
use Net::SMTP;
use HTTP::Date qw(time2iso str2time time2iso time2isoz); 
use Data::Dumper;
use Getopt::Std;
use vars qw($opt_d );
getopts('d:');
# mail_user should be your_mail@163.com
 $message= "@ARGV";
 $env="$opt_d";
 sub send_mail{
 my $CurrTime = time2iso(time());
 my $to_address = shift;
 my $mail_user = 'zhao.yangjian@163.com';
 my $mail_pwd = 'xx';
 my $mail_server = 'smtp.163.com';
 
 my $from = "From: $mail_user\n";
 my $subject = "Subject: zjcap info\n";
 my $info = "$CurrTime--$message";
 my $message = auth($mail_user, $mail_pwd) || die "Auth Error! $!";
 $smtp->mail($mail_user);
 $smtp->to($to_address);
 
 $smtp->data();  # begin the data
 $smtp->datasend($from); # set user
 $smtp->datasend($subject); # set subject
 $smtp->datasend("\n\n");
 $smtp->datasend("$message\n"); # set content
 $smtp->dataend();
 $smtp->quit();
};
 
send_mail ('zhao.yangjian@163.com'); 
 
2017-01-12 10:19:19,888 jjjjj Exception
{
 "@version" => "1",
 "@timestamp" => "2017-01-12T02:19:19.888Z",
  "host" => "Vsftp",
  "time" => "2017-01-12 10:19:19,888",
  "Level" => "jjjjj",
  "type" => "tailong",
 "messager" => "tailong-2017-01-12 10:19:19,888 jjjjj Exception"
}


下载本文
显示全文
专题怎么将win10系统教育版更变回专业版怎么将win10系统教育版更变回专业版专题win10应用商店如何申请退款win10应用商店如何申请退款专题在哪关闭win10快速启动在哪关闭win10快速启动专题怎样解决win10底部任务栏无响应的问题怎样解决win10底部任务栏无响应的问题专题如何关闭win10企业版的自动更新服务如何关闭win10企业版的自动更新服务专题win10系统excel表格进行排序的方法win10系统excel表格进行排序的方法专题怎样给win10系统进行系统恢复怎样给win10系统进行系统恢复专题冰冻的包子需要解冻后再蒸吗冰冻的包子需要解冻后再蒸吗专题如何设置win10系统自动更新如何设置win10系统自动更新专题青春浙江微信公众号怎么关注青春浙江微信公众号怎么关注专题雷公菌怎么清洗更快雷公菌怎么清洗更快专题如何在微信头像旁备注姓名如何在微信头像旁备注姓名专题怎样删除快手退款记录怎样删除快手退款记录专题纯胡麻油可以高温炒菜吗纯胡麻油可以高温炒菜吗专题大姨妈漏床上怎么快速弄掉大姨妈漏床上怎么快速弄掉专题站着淋浴怎么洗头站着淋浴怎么洗头专题抖音火山版怎么发长视频抖音火山版怎么发长视频专题和面酵母放多了怎么办和面酵母放多了怎么办专题面放冰箱里了一夜没发怎么办面放冰箱里了一夜没发怎么办专题白色衣服洗后变淡红色白色衣服洗后变淡红色专题活虾洗过怎么有胶一样的东西活虾洗过怎么有胶一样的东西专题新鲜青口怎么保存过夜新鲜青口怎么保存过夜专题如何判断果酱熬好没有如何判断果酱熬好没有专题用普通的玉米粒怎么做爆米花用普通的玉米粒怎么做爆米花专题湿蒜头怎么弄干湿蒜头怎么弄干专题冻鸡腿没解冻直接煮了能吃吗冻鸡腿没解冻直接煮了能吃吗专题蛋黄变绿了能不能吃蛋黄变绿了能不能吃专题西瓜冬天太冷如何热吃西瓜冬天太冷如何热吃专题冰冻鱼怎么解冻才和鲜的一样冰冻鱼怎么解冻才和鲜的一样专题三七块太硬怎么能切片三七块太硬怎么能切片专题elk查看日志专题flume采集日志到kafka专题python 记录日志到日志服务器专题logstash fluentd专题python对log日志分析专题查看logstash日志专题logstash处理java日志专题logstash 采集日志专题python线上日志监控专题filebeat采集日志到logstash专题python免费课程全套专题python日志分析库专题python如何进行日志分析专题logstash收到日志后执行python脚本专题pythonlogging日志详解专题python中打log日志专题python日志监控分析专题python 实时日志数据解析专题python自动化日志分析框架专题python实时日志监控专题