# 需求说明
有时候我们想要将变量设置为级联关系,比如在做筛选的时候,先选择国家,然后加载该国家对应的省或州,最后再是省或州下面的市等。通过 grafana 的 variable 绑定变量可以将这种情况实现。
具体可以参考 官方说明
下面是以 elasticsearch 为数据源的具体实现细节。
# 信息录入 ES
我们可以从网上下载一份省市的关联信息表,可以直接导入 es 或者通过一些简单脚本写入 es。
from elasticsearch import Elasticsearch, helpers
import pandas as pd
if __name__ == '__main__':
sql = "select country, province, city from tb_location_mapping"
df = pd.read_sql_query(sql, engine)
data = df.to_dict(orient='records')
es_host_list = '192.168.0.1,192.168.0.2,192.168.0.3'.split(',')
es_client = Elasticsearch(hosts=es_host_list, http_auth=('es_username', 'es_password'))
documents = [{
"_index": 'tb_location_mapping',
"_source": doc,
'_id': f"{doc['country']}{doc['province']}{doc['city']}"
} for doc in data]
helpers.bulk(es_client, documents)
# 添加 Grafana 数据源
因为上面我们将数据写到 tb_location_mapping
这个 index 下面了,所以我们要在 grafana 里新增一个 es 数据源指向这个 index。
# 给 Dashboard 添加变量
打开 dashboard,点开配置,找到 variable,如下新增 3 条变量
- country 变量:
{"find": "terms", "field": "country.keyword"}
- province 变量:
{"find": "terms", "field": "province.keyword", "query": "country: $country"}
- city 变量:
{"find": "terms", "field": "city.keyword", "query": "province: $province"}
注意下每个变量命令的 name,这样通过 $
绑定才会起作用。