日志文件是用于记录系统操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。 既然日志那么重要,在实际运维中我们应该如何处理?

什么是日志监控?

日志监控是指运维人员在程序输出某些关键字或者某种级别日志时候,发送告警通知相关人员,日志监控可以及时发现故障发生。一般存在以下几种情况:

  • 某种级别的日志(通常是ERROR级别的日志)出现或者单位时间内达到某次数
  • 某些关键字的异常日志(例OutOfMemory、connect timed out),出现或者单位时间内达到某次数
  • 某些特殊关键字的正常日志(success)
  • 某段时间内没有日志输出等

做好日志监控的前提

  • 1、 输出目录规范化:目录统一化、备份目录统一化
  • 2、 输出格式规范化:技术中心统一使用某种日志输出格式,方便文件分割和查找
  • 3、 输出等级规范化:ERROR、WARM、INFO、DEBUG等等级,通常线上日志禁止输出DEBUG级别日志、否则日志看起来多而且不方便监控
  • 4、 切割日志格式规范化:建议按照时间天数格式切割、大文件还可以小时切割

日志监控思路可分集中式、分布式

分布式原理如下:

分布式监控通常存放在web服务器上,可以通过程序本身去触发、或者编写监控脚本实现

集中式

集中式有ELK,web端部署logstash推送日志到ES,通过kibana分析、展现、监控

ELK wetcher 告警

演示ELK版本为5.4.3,需要安装x-pack插件
1、进入左侧导航栏里面的Management–Watcher如下图所示

2、进入后,能看到有三个框,分别是“ID”、“Name”和“Watch JSON”。
ID:填写最能代表这个告警的名称,简单,容易搜索,且有代表性
Name:可以详细描写该告警的名称,便于理解
Watch JSON:接入告警的最重要的地方,查询语法和告警规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
{
"trigger": {
//查询时间间隔
"schedule": {
"interval": "10m"
}
},
"input": {
"search": {
"request": {
"search_type": "query_then_fetch",
//查询索引
"indices": [
"example.com-*"
],
"types": [],
"body": {
//条数
"size": 10,
"query": {
"bool": {
"must": [
{
//查询内容
"match": {
"message": "error"
}
},
{
//查询时间范围
"range": {
"@timestamp": {
"gt": "now-1h"
}
}
}
]
}
}
}
}
}
},
"condition": {
"compare": {
//查询返回大于或者等于2条即触发action
"ctx.payload.hits.total": {
"gte": 2
}
}
},
"actions": {
"attack_alert": {
"throttle_period_in_millis": 600000, //每两次告警间的最小时间间隔
"webhook": {
"scheme": "https",
"host": "oapi.dingtalk.com",
"port": 443,
"method": "post",
"path": "/robot/send",
"params": {
"access_token": "xxx"
},
"headers": {
"Content-type": "application/json"
},
"body": "{ \"msgtype\": \"markdown\", \"at\": {\"isAtAll\": \"True\"},\"markdown\": {\"title\": \"NGINX日志报错通知\",\"text\": \" **NGINX日志报错通知:** \\n \\n{{#ctx.payload.hits.hits}}{{_source.message}}\\n{{/ctx.payload.hits.hits}}\"} }"
}
}
}
}

以上使用钉钉告警,邮件告警也是相同原理编写即可。

Comments

2018-05-28