SeaTable 開發者版是一款免費易用、可擴充套件的資料中臺產品。它同時結合了協同表格的易用性和資料庫強大的資料處理能力。SeaTable 提供了 Restful API,這樣你就可以很方便的隨時隨地通過 HTTP 協議來寫入資料。
本文我們主要介紹怎麼用 SeaTable 來記錄伺服器上多種服務的錯誤日誌,實現日誌的視覺化,防止錯誤資訊被忽視。總體的架構如下圖:
示例如下圖:
特色包括
- 日誌用 Markdown 格式放在一個程式碼塊中並記錄到 SeaTable 的長文字列中
- 我們可以用 SeaTable 多檢視的功能建立多個不同的檢視,每個檢視包括特定的過濾條件,方便我們快速的刪選檢視資料
下面來具體介紹搭建過程。
用 filebeat 來把日誌傳送到 Redis
安裝 filebeat
在宿主機上安裝,以 Ubuntu 20.04 為例
apt update && apt install filebeat -y
filebeat 配置檔案
vim /etc/filebeat/filebeat.yml
內容如下,根據實際配置修改
https://github.com/seatable/s...
filebeat.inputs:
- type: log
paths:
- /opt/seatable/shared/seatable/logs/dtable_web.log # 日誌路徑
tags: ["dtable-web"] # 對應表格中的 Service
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}|^[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true # 多行匹配,以日期開頭的資訊,例如:'2021-10-12' 或 '[2021-10-12'
multiline.match: after
- type: log
paths:
- /opt/seatable/shared/seatable/logs/dtable-server.log
tags: ["dtable-server"]
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}|^[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
output.redis:
hosts: ["redis host"]
password: "redis password"
db: 0
timeout: 5
keys:
- key: "seatable-error-logs" # Redis key,不可修改
when.contains:
message: "[ERROR]" # 匹配日誌中的關鍵詞
以上的示例配置適合於日誌中的時間格式為類似 2021-10-12
或者 [2021-10-12
開頭,能夠識別出多行的錯誤日誌。
啟動 filebeat
filebeat 會把匹配的日誌傳送到 Redis 中
service filebeat start
用指令碼從 Redis 讀取訊息記錄到 SeaTable
SeaTable 表
- 生成 API Token
- 建立以下列,區分大小寫
名稱 | 首列 | 型別 |
---|---|---|
Service | √ | 文字 或 單選 |
Time | x | 日期,精確到分鐘 |
Log | x | 長文字 |
指令碼
在宿主機上安裝,路徑 /opt/ 為例
cd /opt/
git clone git@github.com:seatable/seatable-syncer.git
安裝 Python 依賴
cd seatable-syncer/log-sync/
pip3 install -r requirements.txt
配置檔案
vim log_syncer_settings.py
內容如下,根據實際配置修改
# SeaTable
server_url = 'SeaTable 伺服器地址'
api_token = '表格的 api_token'
table_name = 'table name'
# Redis
redis_host = 'redis host'
redis_db = 0
redis_port = 6379
redis_password = None
啟動指令碼
指令碼從 Redis 中讀取匹配的日誌,傳送到 SeaTable 中
python3 log_syncer.py
log_syncer.py 能夠處理以下格式開頭的日誌
2020-01-01 01:02:02
2020-01-01T01:02:02
[2020-01-01 01:02:02
[2020-01-01T01:02:02
如果你的日誌格式不符合上面的要求,可以自行修改下檔案 log_syncer.py 。
在 SeaTable 中共享和後續處理
在把日誌同步到 SeaTable 的一個表格後,我們就可以方便的把日誌資訊共享到群組和其他個人,方便協同來分析問題。還可以使用 提醒規則 或 自動化規則 將日誌資訊即時通知給協作人。還可以加入自動處理規則,比如符合某些條件的日誌,加上可以忽略的標籤,符合某些條件日誌,加上待處理的標籤。
總結
通過 filebeat, Redis 和 Python 指令碼,我們就可以收集多個伺服器的日誌到 SeaTable 的一個表格中。通過表格的過濾條件、多檢視功能,我們可以方便的對日誌進行分析和檢視。通過共享協作功能,我們就可以方便的實現多人協同處理。此文拋磚引玉,希望大家發現 SeaTable 更多的用法,提升工作效率!