最近在选一款日志服务,对比了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
然后可以添加日志看板+号->dashboard->add new pannel->下面query选择loki,log labels选择job->apisix,右侧选择logs组件,不出意外的话你就能看到你apisix发送给loki的日志了。
你还可以通过explore对日志做相应的格式化查看
总结:由于skywalking和elasticsearch太重了,所以我体验后就没有使用了,一个容器几百兆到1个多G,对于个人来说没有必要使用,我使用工具第一考虑要素是高性能和轻量化,将来这都是活生生的硬件成本啊。