cLoki 是一个构建在 ClickHouse 之上的比较灵活的 Loki 兼容 LogQL API。
Loki API 及其 Grafana 原生集成非常出色、简单易用 - 但我们更喜欢 ClickHouse。
cLoki 实现了一个完整的 LogQL API,该 API 由位于 ClickHouse 表之上的快速批量 LUR 缓存,并依靠其列式搜索和插入性能以及存储数据的可靠分布和集群功能。就像 Loki 一样,cLoki 不会解析或索引传入的日志,而是使用与 Prometheus 相同的标签系统对日志流进行分组。
cLoki 实现了 LogQL 查询,以提供与 Loki API 的兼容。Grafana Loki 数据源可用于本地查询日志和显示提取的时间序列,不需要额外的插件。
cLoki 支持通过使用 JSON 或 Protobuf 的 Push API 输入,它与 Promtail 和任何其他 Loki 代理兼容。除此之外,cLoki 还可以接受和转换使用 Influx、Elastic、Tempo 和其他常见的 API 格式的日志和指标插入。
我们解析和发送日志流到 cLoki 的首选工具是 paStash
,它具有广泛的插值能力,可以创建标签和修剪任何日志,在处理指标时,建议发送 JSON 格式的日志。
cLoki Pulse 为 Grafana Tempo API 提供实验性支持,提供跨度摄取和查询。
在数据库层面,Tempo Spans/Traces 被存储为标记的日志,并且可以从 LogQL 和 Tempo APIs 访问。
如果你使用 Docker,只需将我们的容器添加到你的 Stack 发送流量即可,cLoki 实例是无状态的,对负载平衡器友好。
cloki:
image: qxip/cloki:latest
ports:
- "3100:3100"
environment:
- CLICKHOUSE_SERVER=http://user:pass@clickhouse:8123
在进行手动安装之前,必须具备以下要求。
clickhouse-server
服务必须带 HTTP+ 认证nodejs
14.x 或 16.x,已安装 npm
然后安装 cloki
和 pm2
:
sudo npm install -g cloki pm2
使用 pm2
启动 cloki
,并使用你的 clickhouse-server 实例进行连接:
cd $(dirname $(readlink -f `which cloki`)) \
&& CLICKHOUSE_SERVER="localhost" CLICKHOUSE_AUTH="default:password" CLICKHOUSE_DB="cloki" \
pm2 start cloki --name "cloki"
此外也可以使用 pm2 配置文件来启动和管理 cloki 实例:
module.exports = {
apps : [{
name : "cloki_custom",
script : "cd $(dirname $(readlink -f `which cloki`)) && ./cloki.js",
env: {
"UUID": "cloki_custom",
"CLICKHOUSE_SERVER": "localhost",
"CLICKHOUSE_PORT": 8123,
"CLICKHOUSE_AUTH": "default:password",
"CLICKHOUSE_DB": "cloki_custom",
"CLOKI_USER": "demo",
"CLOKI_PASSWORD": "demo",
"LABELS_DAYS": 7,
"SAMPLES_DAYS": 7,
"PORT": 3100,
"DEBUG": false
}
}]
}
检查服务状态:
pm2 status cloki
如果没有错误,则可以保存你的服务并进行启动:
pm2 save
pm2 startup
当然同样你也可以部署到 Kubernetes 中去,关于 cLoki 的更多使用方法可以前往官方文档 https://github.com/lmangani/cLoki/wiki 页面了解更多相关信息。
Git仓库:https://github.com/lmangani/cLoki