clickhouse-logger

属性

注意:schema 中还定义了 encrypt_fields = {"password"},这意味着该字段将会被加密存储在 etcd 中。具体参考 加密存储字段

该插件支持使用批处理器来聚合并批量处理条目(日志/数据)。这样可以避免插件频繁地提交数据,默认情况下批处理器每 5 秒钟或队列中的数据达到 1000 条时提交数据,如需了解批处理器相关参数设置,请参考 。

名称类型必选项默认值有效值描述
log_formatobject{“host”: “$host”, “@timestamp”: “$time_iso8601”, “client_ip”: “$remote_addr”}以 JSON 格式的键值对来声明日志格式。对于值部分,仅支持字符串。如果是以 $ 开头,则表明是要获取 或 NGINX 变量。该配置全局生效。如果你指定了 log_format,该配置就会对所有绑定 clickhouse-logger 的路由或服务生效。

首先,你需要在 ClickHouse 数据库中创建一个表来存储日志:

  1. `host` String,
  2. `client_ip` String,
  3. `route_id` String,
  4. `service_id` String,
  5. `@timestamp` String,
  6. PRIMARY KEY(`@timestamp`)
  7. ) ENGINE = MergeTree()

在 ClickHouse 中执行select * from default.test;,将得到类似下面的数据:

启用插件

  1. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "plugins": {
  4. "clickhouse-logger": {
  5. "user": "default",
  6. "password": "a",
  7. "database": "default",
  8. "logtable": "test",
  9. "endpoint_addrs": ["http://127.0.0.1:8123"]
  10. }
  11. },
  12. "type": "roundrobin",
  13. "nodes": {
  14. "127.0.0.1:1980": 1
  15. },
  16. "uri": "/hello"
  17. }'
注意

如果配置多个 endpoints,日志将会随机写入到各个 endpoints

现在你可以向 APISIX 发起请求:

禁用插件

  1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  3. {
  4. "methods": ["GET"],
  5. "uri": "/hello",
  6. "plugins": {},
  7. "upstream": {
  8. "type": "roundrobin",
  9. "nodes": {
  10. "127.0.0.1:1980": 1
  11. }