我正在创建一个 Nginx 代理管理器监视器应用程序,以将请求位置显示到 grafana 地理地图中。
我可以解析 IP、纬度、经度和其他信息并将其发送到 InfluxDB2 实例中。简而言之,如下所示:
def _record_log_entry(self, logts, scheme, domain, ip):
country, city, latitude, longitude = self._get_location_from_ip(ip)
p = Point("Access") \
.tag('domain', domain) \
.tag('scheme', scheme) \
.field('ip', ip) \
.field('city', city) \
.field('country', country) \
.field('latitude', float(latitude)) \
.field('longitude', float(longitude)) \
.time(logts)
self._influxdb_write_api.write(bucket=self._cfg.influxdb.bucket, record=p)
现在我想显示这些位置以及已收到多少请求。通常,我想要一个这样的表:
latitude | longitude | n requests (in time interval)
我做了这样的事情:
from(bucket: "npm")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "Access")
|> filter(fn: (r) => r["_field"] == "ip" or r["_field"] == "latitude" or r["_field"] == "longitude")
|> group(columns: ["_field"])
|> aggregateWindow(every: v.windowPeriod, fn: count, createEmpty: false)
|> yield(name: "count")
但我只得到三个结果集:
Time | IP (n occurence)
Time | latitude (n occurence)
Time | longitude (n occurence)
关于如何做的任何想法?