對系統(tǒng)的日志監(jiān)控,通用做法是使用ELK(Elasticsearch、Logstash、Kibana)進(jìn)行監(jiān)控和搜索日志,這里給出另一種方案:通過Filebeat接收日志到Kafka,監(jiān)控平臺接收Kafka,并通過WebSocket實(shí)時(shí)展示。
這種方案還可以增加Metricbeat監(jiān)控機(jī)器指標(biāo)。另外,監(jiān)控平臺可以選擇其他方式展示日志,靈活性大。
這種方案適合對系統(tǒng)進(jìn)行實(shí)時(shí)監(jiān)控、以及對系統(tǒng)CPU、內(nèi)存進(jìn)行實(shí)時(shí)監(jiān)控的場景。
結(jié)構(gòu)圖:
流程圖:
數(shù)據(jù)收集
數(shù)據(jù)收集組件包括filebeat和metricbeat,尋找一個(gè)合適的本地文件夾進(jìn)行部署,無需su權(quán)限。
其中,filebeat用于日志收集和結(jié)構(gòu)化數(shù)據(jù)收集,metricbeat用于系統(tǒng)信息收集。
filebeat安裝與配置
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.2-linux-x86_64.tar.gz
tar zxf filebeat-7.16.2-linux-x86_64.tar.gz
cd filebeat-7.16.2-linux-x86_64
vi filebeat.yml
(用實(shí)際日志文件名替換{FILE_PATH},如:/data/logs/systemx/abcd.log)
filebeat.inputs:
- type: filestream
enabled: true
paths:
- FILE_PATH
output.kafka:
enabled: true
hosts: ["kfk-01.example.com:9092","kfk-02.example.com:9092","kfk-03.example.com:9092"]
topic: system_x_journal
啟動(dòng)filebeat
nohup ./filebeat -c filebeat-[STRATEGY_ID]-jnl.yml -path.data=$PWD/data_[STRATEGY_ID]_jnl/ > filebeat-[STRATEGY_ID]-jnl.log 2>&1 &
Or
nohup ./filebeat -c filebeat-[STRATEGY_ID]-stt.yml -path.data=$PWD/data-[STRATEGY_ID]-stt/ > filebeat-[STRATEGY_ID]-stt.log 2>&1 &
filebeat文檔在這里:Filebeat Reference [7.16] | Elastic
metricbeat安裝與配置
安裝
wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.16.2-linux-x86_64.tar.gz
tar zxf metricbeat-7.16.2-linux-x86_64.tar.gz
cd metricbeat-7.16.2-linux-x86_64
vi metricbeat.yml
配置
metricbeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
metricbeat.modules:
- module: system
metricsets: [core]
core.metrics: [percentages, ticks]
processors:
- add_host_metadata:
netinfo.enabled: true
output.kafka:
enabled: true
hosts: ["kfk-01.example.com:9092","kfk-02.example.com:9092","kfk-03.example.com:9092"]
topic: system_x_sysinfo
啟動(dòng)
nohup ./metricbeat -c metricbeat.yml > metricbeat.log 2>&1 &
對于多個(gè)系統(tǒng)部署在一臺服務(wù)器上的情況,往往會共用一份機(jī)器信息,則將配置文件的topic改為:system_x_ID_sysinfo。
注意:
1.metricbeat默認(rèn)不帶IP,需要在配置文件添加add_host_metadata
2.metricbeat默認(rèn)不帶CPU所有內(nèi)核的負(fù)載,需要擴(kuò)展module: system
3.傳遞內(nèi)容及數(shù)據(jù)格式在這里:System fields | Metricbeat Reference [8.9] | Elastic
Kafka數(shù)據(jù)查看
作為中間調(diào)試步驟,可以登錄到測試服務(wù)器,查看Kafka輸出
cd /usr/local/kafka/bin/
sh kafka-console-consumer.sh --bootstrap-server kfk-01.example.com:9092,kfk-02.example.com:9092,kfk-03.example.com:9092 --topic YOUR_TOPIC
???????Python(FastAPI)示例
在一個(gè)典型的Python FastAPI項(xiàng)目中,通過kafka consumer訂閱對應(yīng)策略的topic,持續(xù)消費(fèi)kafka存儲的日志數(shù)據(jù),然后通過websocket服務(wù),將日志推給連接的ws客戶端。
KafkaConsumer
使用python的kafka包。
注意:安裝kafka-python,不要kafka
使用?pip list | grep kafka查看是否有安裝,如果已安裝kafka,先卸載:
pip uninstall kafka
再安裝
pip install kafka-python
FastAPI主程序示例
from web.monitors import loginfo, sysinfo
import asyncio
# 已聲明 app = FastAPI()
@app.on_event("startup")
async def startup():
loop = asyncio.get_running_loop()
logging.info(loop)
journal.set_config(config, loop)
sysinfo.set_config(config)
app.mount("/loginfo", loginfo.router_loginfo)
app.mount("/sysinfo", sysinfo.router_sysinfo)
logging.info("config journal and sysinfo")
附1:metricbeat機(jī)器信息返回字段
system_name:系統(tǒng)名稱
app_cpu:系統(tǒng)應(yīng)用占用的CPU(單位:百分比)
app_memory:系統(tǒng)應(yīng)用占用的內(nèi)存(單位:字節(jié))
app_start_time:系統(tǒng)應(yīng)用啟動(dòng)時(shí)間
app_pid:系統(tǒng)應(yīng)用的進(jìn)程ID
cpu_sys_usage:機(jī)器整體CPU系統(tǒng)使用(單位:百分比)
cpu_idle:機(jī)器整體CPU閑置(單位:百分比)
cpu_user_usage:機(jī)器整體CPU用戶使用(單位:百分比)
cpu_cores:機(jī)器CPU內(nèi)核數(shù)
cpu_cores_usage:列表,機(jī)器所有CPU核的負(fù)載(單位:百分比)
memory_usage:機(jī)器整體內(nèi)存占用(單位:百分比)
memory_total:機(jī)器內(nèi)存總和(單位:字節(jié))
disk_usage:機(jī)器磁盤占用率(單位:百分比)
disk_total:機(jī)器磁盤空間總和(單位:字節(jié))
host_name:主機(jī)名
os:主機(jī)操作系統(tǒng)
ip_addr:主機(jī)IP
附2:FastAPI+Websocket問題
基于解耦原則,日志的kafka消費(fèi)、websocket服務(wù)模塊需要放在單獨(dú)的文件中,但是,通過app.include_router添加的ws路徑不起作用,相關(guān)bugreport見這里。
目前的解決方案是:
在ws router服務(wù)模塊中也聲明app:
router_journal = FastAPI()
然后在主app文件中附加此router模塊:文章來源:http://www.zghlxwxcb.cn/news/detail-620941.html
app.mount(router_journal)文章來源地址http://www.zghlxwxcb.cn/news/detail-620941.html
到了這里,關(guān)于通過Filebeat進(jìn)行日志監(jiān)控的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!