最近在选一款日志服务,对比了skywalking logger、elasticsearch-logger、loki-loger、kafka-logger和其他云服务logger,首先云服务logger不会选,其中四者体验了前三者,skywalking logger、elasticsearch-logger这两个日志服务偏重,追求轻量的我选择了loki-logger。

apisix搭配loki-logger有个坑就是apisix-dashboard无法使用,因为插件列表没有loki-logger,需要通过api配置,因为我装的是最新的apisix 3.8.0,这个版本是带loki-logger插件的,但是apisix 3.2.0版本是不带的,只是apisix-dashboard就无法使用了,很遗憾。

首先修改Docker compose部署最新版Apisix网关(一)中 docker-compose.yaml,增加一个容器loki

  loki:
    image: grafana/loki:2.9.4
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      apisix:

另外grafana的配置文件中也要配置下loki源,目录为./grafana_conf/provisioning/datasources/all.yaml

datasources:
 - access: 'proxy'
   editable: true
   is_default: true
   name: 'apisix'
   org_id: 1
   type: 'prometheus'
   url: 'http://prometheus:9090'
   version: 1
 - name: 'Loki'
   type: 'loki'
   access: 'proxy'
   orgId: 1
   url: 'http://loki:3100'
   basicAuth: false
   isDefault: true
   version: 1
   editable: false

重启docker-compose就会拉取并启动loki容器

我看了下loki-logger插件没有全局配置开关,所以只能针对单个路由进行配置,配置如下(新增路由并添加日志插件,前提先配置一个上游,这里就只要填id即可,不建议路由中直接添加上游信息):

curl http://192.168.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: xxxxxxxxxxxxxxxxxx' -X PUT -d '
{
   "plugins": {
        "loki-logger": {
            "endpoint_addrs" : ["http://loki:3100"]
        }
    },
   "upstream_id": "1",
   "uri": "/test",
   "name": "test",
   "host": "test.com"
}'

已经有路由,在路由下添加一个loki-logger插件,可以这样做:

curl http://192.168.0.1:9180/apisix/admin/routes/{路由id} -H 'X-API-KEY: xxxxxxxxxxxxxxxxxx' -X PATCH -d '
{
   "plugins": {
        "loki-logger": {
            "endpoint_addrs" : ["http://loki:3100"]
        }
    }
}

全局修改loki-logger日志的格式化形式, 日志格式以 JSON 格式声明为键值对。值只支持字符串类型。可以通过在字符串前面加上 $ 来使用 APISIX 变量 和 Nginx 变量

curl http://192.168.0.1:9180/apisix/admin/plugin_metadata/loki-logger -H 'X-API-KEY: xxxxxxxxxxxxxxxxxx' -X PUT -d '
{
    "log_format": {
        "host": "$host",
        "@timestamp": "$time_iso8601",
        "client_ip": "$remote_addr"
    }
}'

还原对loki-logger日志的格式化形式

curl http://192.168.0.1:9180/apisix/admin/plugin_metadata/loki-logger -H 'X-API-KEY: xxxxxxxxxxxxxxxxxx' -X PUT -d '
{
    "log_format": []
}'

启动容器后,访问grafana管理平台,查看设置->DataSource在原来的基础下加了一个loki
file

然后可以添加日志看板+号->dashboard->add new pannel->下面query选择loki,log labels选择job->apisix,右侧选择logs组件,不出意外的话你就能看到你apisix发送给loki的日志了。
file

你还可以通过explore对日志做相应的格式化查看
file

总结:由于skywalking和elasticsearch太重了,所以我体验后就没有使用了,一个容器几百兆到1个多G,对于个人来说没有必要使用,我使用工具第一考虑要素是高性能和轻量化,将来这都是活生生的硬件成本啊。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注