首页 > 解决方案 > 从influxdb查询经纬度到grafana geomap

问题描述

我正在创建一个 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)

关于如何做的任何想法?

标签: grafanainfluxdbflux-influxdb

解决方案


推荐阅读