前置部署:

  • elastic search
  • kafka
  • logstash
  • grafana

kafka配置

在kafka集群新增topic, 建议通过ui界面

logstash配置

根据kafka地址和es地址, 配置logstash
(其实感觉logstash不好用, 找机会调研其他的)

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
input {
kafka {
bootstrap_servers => "kafka1-addr:9092,kafka2-addr:9092"
topics => ["data_monitor"]
group_id => "data_monitor"
consumer_threads => 3
decorate_events => true
client_id => "data_monitor"
session_timeout_ms => "50000"
request_timeout_ms => "60000"
codec => "json"
}
}

filter {
if "_jsonparsefailure" in [tags] {
drop { }
}
}

output {
elasticsearch {
hosts => [ "es-addr:9200" ]
index => "data_monitor-%{+YYYY.MM.dd}"
user => "elastic"
password => "passwd"
}
}

es配置

索引会被自动创建.
可以在kibana新增index pattern. 记得先写数据再创建index parttern, 勾选上timestamp的索引

日志写入

json格式直接写就行, 最好带上时间戳以时序检索, 否则需要在logstash新增时间戳.

注意: 时间注意时区, 东八区py如下

1
ts = datetime.now().strftime("%Y-%m-%dT%H:%M:%S.000+0800")

grafana设置

1.新增索引数据源
设置->data_source

img

2.使用数据
新增面板->add panel->选择es对应的query和group规则

  • term: 分类聚合
  • filter: 过滤规则, 支持 AND 和 NOT / OR 等二元符
  • date histogram: 时序, 一般用于画线
    img

3.选择面板
曲线配置较简单, 还可以配置gauge/pie和table等

4.添加过滤器: variables. 同时要在filter里使用$开头的变量. 记得AND/OR要大写

img

tips

隐藏空值曲线: legends

img

连接空值点: display

img

非时序的面板支持聚合选项, 如最新数据

img
table等支持override和transform来美化表格
img
img

参考文章
https://zhuanlan.zhihu.com/p/313682358