原理:通过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 | 不记录该字段 |