一,
日志聚合的概念說明
- 日志------
每一個(gè)程序,服務(wù)都應(yīng)該有保留日志,日志的作用第一是記錄程序運(yùn)行的情況,在出錯的時(shí)候能夠記錄錯誤情況,簡單來說就是審計(jì)工作,例如nginx服務(wù)的日志,kubernetes集群的pod運(yùn)行日志,Linux系統(tǒng)的系統(tǒng)日志。
其次是數(shù)據(jù)庫的日志,記錄數(shù)據(jù)庫的運(yùn)行細(xì)節(jié),在需要的時(shí)候通過日志回溯數(shù)據(jù)庫動作,比如MySQL數(shù)據(jù)庫的binlog日志,這類日志比較特殊,基本沒有聚合的意義。
- 日志聚合----
指的是將分散在各個(gè)服務(wù)器上的日志統(tǒng)一一個(gè)入口程序來查看其內(nèi)容,并可通過關(guān)鍵字或者正則表達(dá)式搜索特定的管理人員感興趣的內(nèi)容,例如,efk日志系統(tǒng),elastisearch負(fù)責(zé)將分散的日志收集,flueed將es收集的日志進(jìn)行預(yù)處理以符合我們的審計(jì)工作需求,最終通過kibana這個(gè)web界面查看這些分散于各個(gè)服務(wù)器的日志,以提高管理服務(wù)器的效率,畢竟,日志沒有聚合的時(shí)候,我們是需要每個(gè)服務(wù)器都登陸,然后找到相應(yīng)的日志文件,打開日志文件,檢索需要的內(nèi)容這樣一個(gè)復(fù)雜的流程,而聚合日志后,通過特定標(biāo)簽就可以查詢檢索到我們需要的信息了。
那么,現(xiàn)在的常用日志聚合系統(tǒng)有elk,efk,毫無疑問的,這些系統(tǒng)是比較重的,復(fù)雜的(架構(gòu)復(fù)雜,所以維護(hù)管理也復(fù)雜,在系統(tǒng)出現(xiàn)問題的時(shí)候會比較難以判斷,解決),而這些無疑是會提高我們的使用門檻的,畢竟,如果是在生產(chǎn)上,我們可能希望這個(gè)日志系統(tǒng)是穩(wěn)定高效的,那么,es可能就需要以集群的架構(gòu)來部署,f或者l可能也需要集群的架構(gòu),而集群的維護(hù)和管理工作這些都限制了我們使用的欲望。
OK,有沒有一個(gè)相對elk這樣的日志系統(tǒng)更為簡單的,查詢效率更高的日志系統(tǒng)呢?答案當(dāng)然是? ?---必須有,loki+promtail+grafana基本可以滿足中小企業(yè)的日志聚合功能。
那么,本文將就loki+promtail+grafana這個(gè)日志聚合系統(tǒng)的部署和簡單使用做一個(gè)盡量詳盡的介紹。
二,
架構(gòu)說明
日志收集器---promtail ,負(fù)責(zé)將需要聚合的日志發(fā)送到loki,通常每個(gè)日志節(jié)點(diǎn)都需要安裝
日志處理器---loki,負(fù)責(zé)將promtail推送過來的日志打上特定標(biāo)簽,管理這些聚合到的日志,應(yīng)用層的服務(wù),帶有api,通常只安裝這么一個(gè)服務(wù)
日志展示部分---grafana,展示數(shù)據(jù),也就是web端展示,日志的內(nèi)容統(tǒng)一暴露接口,通常只安裝這么一個(gè)服務(wù)
本文使用的是centos7操作系統(tǒng)
三,
部署方式
部署方式非常多,helm,kubernetes內(nèi)集成yaml清單形式,二進(jìn)制,rpm安裝包形式,docker容器形式都可以,本文主要是二進(jìn)制的方式安裝
二進(jìn)制方式安裝部署的優(yōu)點(diǎn)是部署簡單,方便,形式靈活,可深度定制
四,
二進(jìn)制安裝包的獲取
百度網(wǎng)盤下載地址:鏈接:https://pan.baidu.com/s/1XKqwdJrrYYewsAcy8foQ5Q?pwd=kkey?
提取碼:kkey?
或者在github官網(wǎng)下載,地址為:
Releases · grafana/loki · GitHub
五,
loki的部署
相關(guān)介質(zhì)上傳到服務(wù)器上后,解壓,編寫配置文件,文件內(nèi)容如下:
cat >loki-cfg.yaml<<EOF
auth_enabled: false
server:
http_listen_port: 13100 #http監(jiān)聽端口,代理服務(wù)(promtail)會向此端口發(fā)送日志流
grpc_listen_port: 9086 #grpc監(jiān)聽端口,簡單部署不用管
ingester:
lifecycler:
address: 192.168.123.11
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
max_transfer_retries: 0
schema_config:
configs:
- from: 2023-12-02 #2023-12-02之后loki信息用下面的配置,這個(gè)主要是用來做兼容的
store: boltdb #索引使用哪種存儲
object_store: filesystem #怎么存儲,簡單部署的話保存在本地文件系統(tǒng)
schema: v11
index:
prefix: index_
period: 24h #索引期限24小時(shí)
storage_config:
boltdb:
directory: /tmp/loki/index
filesystem:
directory: /tmp/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
ingestion_rate_mb: 32 #采集速率
ingestion_burst_size_mb: 64 #單次采集大小
max_entries_limit_per_query: 0 #查詢返回的條目的最大行數(shù),默認(rèn)是5000,0表示無限制
retention_period: 24h #全局保留期,超過這個(gè)時(shí)間的日志會被刪除,具體刪除規(guī)則在compactor里配置
#retention_stream: #局部保留期
#- selector: '{level="error"}'
# priority: 1
# period: 720h
chunk_store_config:
max_look_back_period: 0s #最大日志可見時(shí)間,0表示一直可見。or 24h等等
table_manager:
retention_deletes_enabled: false
retention_period: 0s
compactor:
working_directory: /data/loki/compactor #compactor運(yùn)行狀態(tài)保存目錄
shared_store: filesystem
retention_enabled: true #啟動日志刪除
compaction_interval: 10m #compactor每隔10分鐘運(yùn)行一次
retention_delete_delay: 2h #在compactor運(yùn)行2小時(shí)后刪除
retention_delete_worker_count: 150 #用150個(gè)worker刪除chunks
analytics:
reporting_enabled: false #關(guān)閉向loki團(tuán)隊(duì)發(fā)送此配置文件
EOF
配置文件說明:
? ingestion_rate_mb: 32 ?#采集速率,如果日志量比較大的話,需要調(diào)整的
? ingestion_burst_size_mb: 64 #單次采集大小,如果日志量比較大的話,需要調(diào)整的
? max_entries_limit_per_query: 0 ?#查詢返回的條目的最大行數(shù),默認(rèn)是5000,0表示無限制這三個(gè)是比較重要的,其它的其實(shí)是可以默認(rèn)的,就性能比較好
在Loki中,對于客戶端push到distributor中產(chǎn)生的每條日志流是可以對其做條目的大小限制的,這個(gè)在配置里面默認(rèn)是不限制,也就是說每行的日志大小可以是無限?,當(dāng)然大部分情況下我們都不會去限制這個(gè),如果有的同學(xué)環(huán)境特殊,可以考慮開啟對每行日志的大小限制。
limits_config: # 日志條目的大小限制,默認(rèn)不限制 max_line_size: | default = none
除此之外,對于單次查詢的限制還有的chunk、stream和series的,不過大部分場景我們不會去對此做調(diào)整
limits_config: # 單個(gè)查詢最多匹配的chunk個(gè)數(shù) max_chunks_per_query: | default = 2000000 # 限制查詢是匹配到的chunk大小,默認(rèn)0為不限制 max_query_length: | default = 0 # 單詞查詢最多匹配到的日志流個(gè)數(shù) max_streams_matchers_per_query: | default = 1000 # 限制查詢時(shí)最大的日志度量個(gè)數(shù) max_query_series: | default = 500 # 查詢的并發(fā)數(shù) max_query_parallelism | default = 14 # 允許租戶緩存結(jié)果的有效時(shí)間 max_cache_freshness_per_query |default = 1m.
啟動腳本:
/var/log/loki/?目錄需要提前建立,/opt/loki/loki-linux-amd64?是loki的執(zhí)行程序,/opt/loki/loki-cfg.yaml是loki的配置文件絕對路徑
cat >/etc/systemd/system/loki.service <<EOF
[Unit]
Description=loki
After=network.target
[Service]
ExecStart=/opt/loki/loki-linux-amd64 -config.file=/opt/loki/loki-cfg.yaml &>> /var/log/loki/loki.log
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
啟停和自動啟動:
systemctl enable loki && systemctl start loki && systemctl status loki
六,
promtail的部署
promtail的配置文件:
這個(gè)是一個(gè)非常簡單的靜態(tài)讀取/var/log/目錄下的log后綴文件信息,并上傳到loki
cat promtail_config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
# 記錄讀取日志的位置信息文件,Promtail重新啟動時(shí)需要它
positions:
filename: /tmp/positions.ymal
# Loki的api服務(wù)的地址
clients:
- url: http://192.168.123.11:13100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
promtail的啟動腳本:
cat >/etc/systemd/system/promtail.service <<EOF
[Unit]
Description=promtail
After=network.target
[Service]
ExecStart=/opt/loki/promtail-linux-amd64 -config.file=/opt/loki/promtail_config.yaml &>> /var/log/promtail/promtail.log
ExecReload=/bin/kill -s HUP
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
七,
grafana部署安裝
這個(gè)沒什么好說的,rpm安裝啟動服務(wù)就可以了
添加數(shù)據(jù)源
直接explore就可以看到如下了:
點(diǎn)擊label?browser?可以看到:
?
多說一句,內(nèi)存和CPU最好還是給的高一點(diǎn),一開始我只給的4G?loki服務(wù)經(jīng)??ǖ?,很難受,給到8G后就流暢很多了。?文章來源:http://www.zghlxwxcb.cn/news/detail-759414.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-759414.html
到了這里,關(guān)于prometheus|云原生|輕型日志收集系統(tǒng)loki+promtail的部署說明的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!