记录 API 流量日志
API7 企业版支持记录包含主机、客户端 IP 地址和请求时间戳等信息的路由访问日志。这些日志可以帮助识别和解决问题。
API7 企业版通过其插件系统集成了许多日志平台。开箱即用的集成包括以下内容:
- HTTP/TCP/UDP 日志服务器
- SkyWalking
- Kafka
- RocketMQ
- ClickHouse
- Syslog
- 阿里云 SLS
- Google Cloud Logging Service
- Splunk HTTP Event Collector (HEC)
- File logging
- Elasticsearch
- 腾讯云 CLS
- Grafana Loki
本教程将指导你配置 clickhouse-logger 插件,以将 API 流量日志记录到 ClickHouse 数据库中。
前置条件
启动 ClickHouse 服务器
- Docker
- Kubernetes
在 Docker 中启动一个名为 quickstart-clickhouse-server 的 ClickHouse 实例,默认数据库为 quickstart_db,默认用户为 quickstart-user,密码为 quickstart-pass:
docker run -d \
--name quickstart-clickhouse-server \
--network=api7-ee_api7 \
-e CLICKHOUSE_DB=quickstart_db \
-e CLICKHOUSE_USER=quickstart-user \
-e CLICKHOUSE_PASSWORD=quickstart-pass \
-e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 \
--ulimit nofile=262144:262144 \
clickhouse/clickhouse-server
在本地或 Docker 中使用命令行工具 clickhouse-client 连接到 ClickHouse 实例:
docker exec -it quickstart-clickhouse-server clickhouse-client
在数据库 quickstart_db 中创建一个包含 String 类型的 host、client_ip、route_id 和 @timestamp 字段的表 test,你也可以根据需要进行修改:
CREATE TABLE quickstart_db.test (
`host` String,
`client_ip` String,
`route_id` String,
`@timestamp` String,
PRIMARY KEY(`@timestamp`)
) ENGINE = MergeTree()
如果成功,你应该在输出中看到 Ok。
输入 exit 以退出 Docker 容器。
安装 ClickHouse Operator
如果你在 Kubernetes 上安装了网关实例并使用 Ingress Controller 进行配置,请安装 ClickHouse Operator:
curl -s "https://raw.githubusercontent.com/Altinity/clickhouse-operator/master/deploy/operator-web-installer/clickhouse-operator-install.sh" | OPERATOR_NAMESPACE=<YOUR_NAMESPACE> bash
检查所有资源:
kubectl get all
你应该会看到以下 ClickHouse operator 资源:
NAME READY STATUS RESTARTS AGE
pod/clickhouse-operator-56c57f989-kjqtn 2/2 Running 0 32m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/clickhouse-operator-metrics ClusterIP 10.96.253.156 <none> 8888/TCP,9999/TCP 32m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/clickhouse-operator 1/1 1 1 32m
NAME DESIRED CURRENT READY AGE
replicaset.apps/clickhouse-operator-56c57f989 1 1 1 32m
安装 ClickHouse 服务器
创建一个用于简单的 1 分片 1 副本安装的清单文件:
apiVersion: clickhouse.altinity.com/v1
kind: ClickHouseInstallation
metadata:
namespace: api7
name: clickhouse-installation
spec:
configuration:
users:
quickstart-user/password_sha256_hex: c019743ba8bc32d17800bca6d36de903feff9854897c61b6e63ce3e5e93c37ca
quickstart-user/password: quickstart-pass
quickstart-user/networks/ip:
- 0.0.0.0/0
clusters:
- name: simple
将配置应用到你的集群:
kubectl apply -f clickhouse-installation.yaml
检查正在运行的 Pod:
kubectl get pod
你应该会看到 ClickHouse 服务器 Pod 正在运行:
NAME READY STATUS RESTARTS AGE
chi-clickhouse-installation-simple-0-0-0 1/1 Running 0 11m
配置 ClickHouse 服务器
连接到 ClickHouse 实例:
kubectl exec -it chi-clickhouse-installation-simple-0-0-0 -- clickhouse-client
创建数据库:
CREATE DATABASE quickstart_db
在数据库 quickstart_db 中创建一个包含 String 类型的 host、client_ip、route_id 和 @timestamp 字段的表 test,你也可以根据需要进行修改:
CREATE TABLE quickstart_db.test (
`host` String,
`client_ip` String,
`route_id` String,
`@timestamp` String,
PRIMARY KEY(`@timestamp`)
) ENGINE = MergeTree()
如果成功,你应该在输出中看到 Ok。
输入 exit 以退出 ClickHouse 服务器。