# ๐Ÿ LogHive โ€” ้›†ไธญๅผๆ—ฅๅฟ—็ฎก็†็ณป็ปŸ LogHive ๆ˜ฏไธ€ไธช้›†ไธญๅผ็š„ๆ—ฅๅฟ—็ฎก็†็ณป็ปŸ๏ผŒๅฏไปฅไปŽไฝ ็š„ๅคšไธช Python ้กน็›ฎไธญๆ”ถ้›†ๆ—ฅๅฟ—๏ผŒๅนถๆไพ›ๆœ็ดขใ€ๅˆ†ๆžๅ’Œๅ‘Š่ญฆ่ƒฝๅŠ›ใ€‚ ## ๆžถๆž„ๆฆ‚่งˆ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Python ้กน็›ฎ โ”‚ โ”‚ Python ้กน็›ฎ โ”‚ โ”‚ Python ้กน็›ฎ โ”‚ โ”‚ (LogHive SDK)โ”‚ โ”‚ (LogHive SDK)โ”‚ โ”‚ (LogHive SDK)โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ HTTPS / REST API โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ LogHive Backend โ”‚ โ”‚ (FastAPI) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ–ผ โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ES โ”‚ โ”‚PostgreSQLโ”‚ โ”‚ Redis โ”‚ โ”‚ ๆ—ฅๅฟ—ๅญ˜ๅ‚จ โ”‚ โ”‚ ๅ…ƒๆ•ฐๆฎ โ”‚ โ”‚ ้˜Ÿๅˆ—/็ผ“ๅญ˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ” โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Celery โ”‚ โ”‚ Vue 3 โ”‚ โ”‚ ๅผ‚ๆญฅไปปๅŠก โ”‚ โ”‚ ๅ‰็ซฏ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๅŠŸ่ƒฝ็‰นๆ€ง - **๐Ÿ“ฅ ๆ—ฅๅฟ—ๆ”ถ้›†** โ€” ้€š่ฟ‡ REST API ๆŽฅๆ”ถ JSON ็ป“ๆž„ๅŒ–ๆ—ฅๅฟ—๏ผŒๆ”ฏๆŒๅŒๆญฅ/ๅผ‚ๆญฅๅฎขๆˆท็ซฏ - **๐Ÿ” ๅ…จๆ–‡ๆฃ€็ดข** โ€” ๅŸบไบŽ Elasticsearch๏ผŒๆ”ฏๆŒๆŒ‰้กน็›ฎใ€็บงๅˆซใ€ๅ…ณ้”ฎ่ฏใ€Trace IDใ€ๆ—ถ้—ด่Œƒๅ›ด่ฟ‡ๆปค - **๐Ÿ“Š ็ปŸ่ฎกๅˆ†ๆž** โ€” ้”™่ฏฏ็އ่ถ‹ๅŠฟใ€็บงๅˆซๅˆ†ๅธƒใ€TOP N ้”™่ฏฏใ€ๆ—ถๅบๅ›พ่กจ - **๐Ÿ”” ๅ‘Š่ญฆ่ง„ๅˆ™** โ€” ๅฏ้…็ฝฎ็š„้˜ˆๅ€ผๅ‘Š่ญฆ๏ผŒๆ”ฏๆŒ้ฃžไนฆ/้’‰้’‰้€š็Ÿฅ - **๐Ÿ”— ้“พ่ทฏ่ฟฝ่ธช** โ€” ้€š่ฟ‡ Trace ID ๅ…ณ่”ๅŒไธ€่ฏทๆฑ‚็š„่ทจๆจกๅ—ๆ—ฅๅฟ— - **๐Ÿ Python SDK** โ€” ไธ€่กŒไปฃ็ ้›†ๆˆๅˆฐ็Žฐๆœ‰้กน็›ฎ๏ผŒๆ”ฏๆŒๆ ‡ๅ‡† logging handler - **๐Ÿ”„ ๅ‰ๅŽ็ซฏๅˆ†็ฆป** โ€” FastAPI ๅŽ็ซฏ + Vue 3 ๅ‰็ซฏ ## ๅฟซ้€ŸๅฏๅŠจ ### ๅ‰็ฝฎๆกไปถ - Docker & Docker Compose - Python 3.10+๏ผˆๆœฌๅœฐๅผ€ๅ‘๏ผ‰ ### ไฝฟ็”จ Docker Compose๏ผˆๆŽจ่๏ผ‰ ```bash # ๅ…‹้š†้กน็›ฎ cd LogHive # ๅฏๅŠจๆ‰€ๆœ‰ๆœๅŠก docker compose up -d # ๆฃ€ๆŸฅ็Šถๆ€ docker compose ps ``` ๅฏๅŠจๅŽ่ฎฟ้—ฎ๏ผš - **ๅ‰็ซฏ**๏ผšhttp://localhost:3000 - **API**๏ผšhttp://localhost:8000 - **API ๅฅๅบทๆฃ€ๆŸฅ**๏ผšhttp://localhost:8000/api/health - **Kibana**๏ผšhttp://localhost:5601 ### ๆœฌๅœฐๅผ€ๅ‘ ```bash # 1. ๅฏๅŠจไพ่ต–ๆœๅŠก docker compose up -d postgres elasticsearch redis # 2. ๅฏๅŠจๅŽ็ซฏ cd backend pip install -r requirements.txt uvicorn app.main:app --reload --port 8000 # 3. ๅฏๅŠจๅ‰็ซฏ cd frontend npm install npm run dev ``` ## ้กน็›ฎ็ป“ๆž„ ``` LogHive/ โ”œโ”€โ”€ backend/ # FastAPI ๅŽ็ซฏ โ”‚ โ”œโ”€โ”€ app/ โ”‚ โ”‚ โ”œโ”€โ”€ api/ # API ่ทฏ็”ฑ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ logs.py # ๆ—ฅๅฟ—ๆ”ถๅฝ• & ๆŸฅ่ฏข โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ projects.py # ้กน็›ฎ็ฎก็† โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ alerts.py # ๅ‘Š่ญฆ็ฎก็† โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ dashboard.py # ไปช่กจ็›˜ โ”‚ โ”‚ โ”œโ”€โ”€ models/ # SQLAlchemy ๆจกๅž‹ โ”‚ โ”‚ โ”œโ”€โ”€ schemas/ # Pydantic ๆ•ฐๆฎๆจกๅž‹ โ”‚ โ”‚ โ”œโ”€โ”€ services/ # ไธšๅŠก้€ป่พ‘ๅฑ‚ โ”‚ โ”‚ โ”œโ”€โ”€ core/ # ่ฎค่ฏ & ๅทฅๅ…ท โ”‚ โ”‚ โ”œโ”€โ”€ config.py # ้…็ฝฎ โ”‚ โ”‚ โ”œโ”€โ”€ database.py # ๆ•ฐๆฎๅบ“่ฟžๆŽฅ โ”‚ โ”‚ โ””โ”€โ”€ main.py # ๅ…ฅๅฃ โ”‚ โ”œโ”€โ”€ celery_worker/ # Celery ๅผ‚ๆญฅไปปๅŠก โ”‚ โ”œโ”€โ”€ requirements.txt โ”‚ โ””โ”€โ”€ Dockerfile โ”œโ”€โ”€ client/ # Python SDK โ”‚ โ”œโ”€โ”€ loghive_client/ โ”‚ โ”‚ โ”œโ”€โ”€ client.py # ๅŒๆญฅๅฎขๆˆท็ซฏ โ”‚ โ”‚ โ”œโ”€โ”€ async_client.py # ๅผ‚ๆญฅๅฎขๆˆท็ซฏ โ”‚ โ”‚ โ””โ”€โ”€ handler.py # logging ้›†ๆˆ โ”‚ โ”œโ”€โ”€ setup.py โ”‚ โ””โ”€โ”€ README.md โ”œโ”€โ”€ frontend/ # Vue 3 ๅ‰็ซฏ โ”‚ โ”œโ”€โ”€ src/ โ”‚ โ”‚ โ”œโ”€โ”€ api/ # API ่ฐƒ็”จๅฑ‚ โ”‚ โ”‚ โ”œโ”€โ”€ router/ # ่ทฏ็”ฑ โ”‚ โ”‚ โ””โ”€โ”€ views/ # ้กต้ข โ”‚ โ”œโ”€โ”€ package.json โ”‚ โ”œโ”€โ”€ vite.config.js โ”‚ โ””โ”€โ”€ Dockerfile โ”œโ”€โ”€ docker-compose.yml โ”œโ”€โ”€ .env.example โ””โ”€โ”€ README.md ``` ## ไฝฟ็”จๆŒ‡ๅ— ### 1. ๅˆ›ๅปบ้กน็›ฎ & ่Žทๅ– API Key ```bash # ๆณจๅ†Œ้กน็›ฎ curl -X POST http://localhost:8000/api/projects \ -H "Content-Type: application/json" \ -d '{"name": "my-app", "description": "ๆˆ‘็š„ Python ๅบ”็”จ"}' # ่Žทๅ– API Key๏ผˆๅœจๅ“ๅบ”็š„ api_key ๅญ—ๆฎต๏ผ‰ ``` ### 2. ๅœจไฝ ็š„้กน็›ฎไธญไฝฟ็”จ SDK ```python # ๅฎ‰่ฃ… SDK # pip install loghive-client from loghive_client import LogHiveLogger logger = LogHiveLogger( project="my-app", api_key="your-api-key", endpoint="http://localhost:8000", ) logger.info("ๆœๅŠกๅฏๅŠจๆˆๅŠŸ", extra={"port": 8080}) logger.error("ๆ•ฐๆฎๅบ“่ฟžๆŽฅ่ถ…ๆ—ถ", exc_info=True) ``` ### 3. ๆ ‡ๅ‡† logging ้›†ๆˆ๏ผˆ้›ถไปฃ็ ๆ”นๅŠจ๏ผ‰ ```python import logging from loghive_client import LogHiveHandler handler = LogHiveHandler("my-app", "api-key", "http://localhost:8000") logging.getLogger().addHandler(handler) # ๆ‰€ๆœ‰็Žฐๆœ‰็š„ๆ—ฅๅฟ—่ฐƒ็”จ่‡ชๅŠจ่ฝฌๅ‘ๅˆฐ LogHive logging.info("่ฟ™ๆกๆ—ฅๅฟ—ไนŸไผšๅ‘้€ๅˆฐ LogHive") ``` ### 4. ็›ดๆŽฅ้€š่ฟ‡ API ๆŽจ้€ๆ—ฅๅฟ— ```bash curl -X POST http://localhost:8000/api/logs/ingest \ -H "Authorization: Bearer your-api-key" \ -H "Content-Type: application/json" \ -d '{ "project": "my-app", "entries": [ { "level": "info", "message": "Hello from my app!", "logger": "myapp.server", "extra": {"user_id": 42} } ] }' ``` ## ๆŠ€ๆœฏๆ ˆ | ๅฑ‚็บง | ๆŠ€ๆœฏ | |------|------| | ๅŽ็ซฏๆก†ๆžถ | FastAPI (Python 3.12) | | ๆ—ฅๅฟ—ๅญ˜ๅ‚จ | Elasticsearch 8.x | | ๅ…ƒๆ•ฐๆฎๅญ˜ๅ‚จ | PostgreSQL 16 / TimescaleDB | | ๆถˆๆฏ้˜Ÿๅˆ— | Redis 7 | | ๅผ‚ๆญฅไปปๅŠก | Celery | | ๅ‰็ซฏ | Vue 3 + Element Plus + ECharts | | ้ƒจ็ฝฒ | Docker Compose | ## ้…็ฝฎ ้€š่ฟ‡็Žฏๅขƒๅ˜้‡้…็ฝฎ๏ผŒ่ฏฆ่ง `.env.example`ใ€‚ไธป่ฆ้…็ฝฎ้กน๏ผš | ๅ˜้‡ | ้ป˜่ฎคๅ€ผ | ่ฏดๆ˜Ž | |------|--------|------| | `SECRET_KEY` | โ€” | JWT ๅฏ†้’ฅ๏ผˆ็”Ÿไบงๅฟ…ๆ”น๏ผ‰ | | `ES_HOST` | localhost | Elasticsearch ๅœฐๅ€ | | `DATABASE_URL` | โ€” | PostgreSQL ่ฟžๆŽฅไธฒ | | `LOG_RETENTION_DAYS` | 30 | ๆ—ฅๅฟ—ไฟ็•™ๅคฉๆ•ฐ | | `FEISHU_WEBHOOK_URL` | โ€” | ้ฃžไนฆๆœบๅ™จไบบ Webhook | ## License MIT