Files
PingWatch/接入LogHive日志系统.md
v6ole 848f804169 PingWatch 网络设备离线监控系统
- FastAPI 后端 + Vue 3 前端
- Docker Compose 一键部署
- Casdoor OAuth 认证集成
- LogHive 集中式日志
- 设备批量 CSV 导入/导出
- WebSocket 实时状态推送
- 企业微信告警通知
- fping 高性能并发 Ping 检测

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:02:04 +08:00

151 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 接入 LogHive 日志系统指南
## 前置准备
向管理员提供你的**项目名称**(如 `user-service`),管理员会返回一个 **API Key**
拿到 API Key 后,在你的项目 `.env` 文件中添加:
```env
# LogHive 日志系统
LOGHIVE_ENDPOINT=http://10.10.10.14:8000
LOGHIVE_PROJECT=你的项目名称
LOGHIVE_API_KEY=管理员给你的API-Key
```
> **不要**把 API 地址和 Key 硬编码在代码里,全部从环境变量读取。
---
## 方式一:零代码改动(推荐)
适用于已使用 Python 标准 `logging` 模块的项目。只需在入口文件添加 3 行:
```python
import logging
import os
from loghive_client import LogHiveHandler
handler = LogHiveHandler(
project=os.environ["LOGHIVE_PROJECT"],
api_key=os.environ["LOGHIVE_API_KEY"],
endpoint=os.environ["LOGHIVE_ENDPOINT"],
level=logging.INFO, # 只发送 INFO 及以上级别
)
logging.getLogger().addHandler(handler)
# 现有代码无需任何修改,所有日志自动发送到 LogHive
logging.info("服务启动成功")
logging.error("数据库连接超时", exc_info=True)
```
### 仅发送特定 logger 的日志
```python
logger = logging.getLogger("myapp.api")
logger.addHandler(handler)
logger.setLevel(logging.WARNING)
```
---
## 方式二:使用 LogHive SDK
适合需要更精细控制的场景,或者不想影响全局 logging 配置。
### 安装
```bash
pip install /path/to/loghive-client
```
### 同步项目使用
```python
import os
from loghive_client import LogHiveLogger
logger = LogHiveLogger(
project=os.environ["LOGHIVE_PROJECT"],
api_key=os.environ["LOGHIVE_API_KEY"],
endpoint=os.environ["LOGHIVE_ENDPOINT"],
)
logger.info("用户登录成功", user_id=42, ip="1.2.3.4")
logger.warning("API 限流触发", rate="90%")
logger.error("支付回调验签失败", trace_id="req-abc-123", exc_info=True)
logger.debug("缓存命中 key=user:42")
logger.critical("磁盘空间不足,服务即将崩溃")
```
SDK 在后台线程异步批量发送,**不会阻塞主线程**。程序退出时会自动 flush 剩余日志。
### 异步项目使用(FastAPI / aiohttp
```python
import os
from loghive_client import AsyncLogHiveLogger
async def main():
async with AsyncLogHiveLogger(
project=os.environ["LOGHIVE_PROJECT"],
api_key=os.environ["LOGHIVE_API_KEY"],
endpoint=os.environ["LOGHIVE_ENDPOINT"],
) as logger:
await logger.info("请求处理完成", path="/api/users", status=200)
```
---
## 方式三:直接调用 REST API(非 Python 项目)
```bash
curl -X POST $LOGHIVE_ENDPOINT/api/logs/ingest \
-H "Authorization: Bearer $LOGHIVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"project": "'$LOGHIVE_PROJECT'",
"entries": [
{
"level": "error",
"message": "服务异常",
"logger": "myapp.module",
"trace_id": "abc-123",
"extra": {"key": "value"}
}
]
}'
```
---
## 日志字段说明
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `level` | string | 是 | `debug` / `info` / `warning` / `error` / `critical` |
| `message` | string | 是 | 日志内容,最长 65536 字符 |
| `logger` | string | 否 | Logger 名称,默认 `root` |
| `trace_id` | string | 否 | 链路追踪 ID,用于关联跨模块日志 |
| `exception` | string | 否 | 异常堆栈,SDK 通过 `exc_info=True` 自动捕获 |
| `extra` | object | 否 | 任意键值对,支持嵌套结构 |
---
## 在 LogHive 前端查看
访问 `http://10.10.10.14:3000`,按项目、级别、关键词、时间范围搜索和统计。
---
## 常见问题
**Q: 发送失败会影响我的主业务吗?**
A: 不会。SDK 在后台线程异步发送,网络失败会自动重试 3 次,最终丢弃并记录本地 warning。
**Q: 日志量很大怎么办?**
A: SDK 默认每 2 秒或积攒 50 条批量发送。可通过 `batch_size``flush_interval` 参数调节。
**Q: 多个进程/worker 同时发送有问题吗?**
A: 没问题。每个进程创建自己的 LogHiveLogger 实例即可。