TICK-telegraf 日志监控实例

inputs.logparser 插件

Posted by tanjiti on June 13, 2019

原理:通过telegraf将端上的log采集输出到influxdb,然后使用grafana进行数据可视化

场景1:监控web访问日志

采集设置

1
2
3
4
5
6
[agent]
 interval = "1s"
 flush_interval = "1s"
 precision = "s"
 hostname = "xxxx"

输出设置

1
2
3
4
5
6
7
8
[[outputs.influxdb]]
  urls = ["http://xxx:8086"]
  database = "xxx"
  skip_database_creation = true
  retention_policy = "autogen"
  username = "xxxx"
  password = "xxxx"

输入设置

1
2
3
4
5
6
7
8
9
10
11
12
[[inputs.logparser]]
 files =  ["/xxx/logs/access.log"]
 from_beginning = false

  watch_method = "inotify"

  [inputs.logparser.grok]
  patterns = ["%{COMBINED_LOG_FORMAT}"]
  measurement = "web_log"
  timezone = "Asia/Shanghai"


telegraf的logparser吸取了logstash的grok精髓

influxdb中的存储结构

tag

1
2
3
4
host 端主机名
path 端日志路径名
resp_code 响应码
verb 请求方法

field

1
2
3
4
5
6
7
8
agent        string
auth         string
client_ip    string
http_version float
ident        string
referrer     string
request      string
resp_bytes   integer

场景2: 监控suricata统计信息

总的流程同上,但上面的例子使用现成的pattern,而本例使用自定义的pattern

采集设置

相同

输出设置

相同

输入设置

1
2
3
4
5
6
7
8
9
10
11
12
[[inputs.logparser]]
 files =  ["/xxx/suricata/log/stats.log"]
 from_beginning = false

  watch_method = "inotify"

    [inputs.logparser.grok]
  patterns = ['flow.%{WORD:protocol:tag}\D+%{INT:number:float}']
  measurement = "suricata_stats_log"
      timezone = "Asia/Shanghai"


influxdb中的存储结构

tag

1
2
3
host 端主机名
path 端日志路径名
protocol suricata统计项

field

1
number   float

###

grok tips

telegraf的inputs.logparser采纳了logstash的grok语法

语法

%{<capture_syntax>[:<semantic_name>][:<modifier>]}

  • 第一个字段: pattern,先查看已有的pattern是否能满足,否则采用自定义pattern(pattern就是正则大法)

  • 第二个字段: 捕获的字段名

  • 第三个字段:修饰符

telegraf常用的修饰符如下

类型  
string 默认类型
int  
float  
duration 可以将5.23ms转换为ns
tag 该字段标记为tag类型
drop 不记录该字段

grok 速查表

grok在线调试

grok_e.x.

telegraf封装的pattern

logstash原生pattern

inputs.logparser更多