promtail 配置详解_基于loki+promtail+grafana技术的日志集合
一、背景和動機
近期運維工作中,隨著項目的不停優化以及上線。在與后端、測試協同工作的交流中發現,為了測試以及解決項目在上線過程中或者試運行中出現的bug報錯問題,開發同事對于日志的分析有著很大的需求。但是現在公司的日志查看主要是給予極少數的人員較大的權限,以及大量的需要運維人員幫忙登陸服務器查看服務日志進行下拉,復制黏貼給開發同事進行自主排錯。
所以為了提高工作效率,同時也減輕運維同事的工作壓力。需要引入日志系統,統一收集日志,又同時可以在頁面中使得開發進行查看,極大的提高排錯效率。
二、技術對比
這里主要對比兩項技術ELK與loki
2.1:技術特點
ELK:
優點:
1、功能豐富,允許復雜的操作
2、對數據的處理,清洗有著巨大的優勢,同時技術框架應用成熟,論壇等技術交流方法成熟。
劣勢:
1、方案往往規模復雜,資源占用高,操作難。很多功能往往用不上,大多數查詢只關注一定時間范圍和一些簡單的參數(如host、service等),使用這些解決方案有點大材小用。
2、主流的ELK(全文檢索)或者EFK比較重
3、Kibana和Grafana之間切換,影響用戶體驗
4、倒排索引的切分和共享的成本較高
Loki:
優點:
1、Loki的架構非常簡單,使用了和prometheus一樣的標簽來作為索引,通過這些標簽既可以查詢日志的內容也可以查詢到監控的數據,不但減少了兩種查詢之間的切換成本,也極大地降低了日志索引的存儲。
2、與ELK相比,消耗的成本更低,具有成本效益。
3、在日志的收集以及可視化上可以連用grafana,實現在日志上的篩選以及查看上下行的功能。
缺點:
1、技術比較新穎,相對應的論壇不是非常活躍。
2、功能單一,只針對日志的查看,篩選有好的表現,對于數據的處理以及清洗沒有ELK強大,同時與ELK相比,對于后期,ELK可以連用各種技術進行日志的大數據處理,但是loki不行。
三、框架說明
Loki架構:
Loki使用了和prometheus一樣的標簽來作為索引,通過標簽既可以查詢日志的內容也可以查詢到監控的數據。Loki將使用與prometheus相同的服務發現和標簽重新標記庫編寫了的pormtail,在節點中promtail以daemonset方式運行在每個節點中通過api等,將它們發送到Loki,然loki與grafana連用,實現日志的可視化顯示。
日志的存儲框架:
1、Distributor:第一個接收日志的組件,Loki通過構建壓縮數據塊來實現批處理和壓縮數據
2、Ingester:組件ingester是一個有狀態的組件,負責構建和刷新chunck,當chunk達到一定的數量或者時間后,刷新到存儲中去。
3、Querier:由Querier負責給定一個時間范圍和標簽選擇器,Querier查看索引以確定哪些塊匹配,并通過greps將結果顯示出來。
四、部署
下載docker鏡像
Docker pull grafana/loki:1.5.0
Docker pull grafana/promtail:latest
Docker pull grafana/grafana:latest
編寫docker-compose文件
grafana:
image: grafana/grafana:latest //指定啟動鏡像
user: root
volumes:- ./grafana/provisioning/:/etc/grafana/provisioning/ //文件映射以及文件夾映射
- ./grafana/grafana.ini:/etc/grafana/grafana.ini- /data/grafana:/var/lib/grafana
ports:- 3000:3000 //端口映射
network_mode: 'host' //所屬網絡
loki:
image: grafana/loki:1.5.0 //啟動鏡像定義
container_name: loki
restart: always
ports:- "3100:3100"volumes:- /root/elk/loki-local-config.yaml:/etc/loki/loki-local-config.yaml
network_mode:'host'promtail:
image: grafana/promtail:latest
container_name: promtail
restart: always
volumes:- /root/elk/promtail-docker-config.yaml:/etc/promtail/config.yml- /opt:/opt //該映射地址可以我定義為日志存放地址1
- /var/log:/var/log //該映射地址可以我定義為日志存放地址2
network_mode: 'host'
編寫promtail與loki的啟動配置文件
Promtail的配置文件 vim /root/elk/promtail-docker-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml # 游標記錄上一次同步位置
sync_period: 5s #10秒鐘同步一次
clients:
- url: http://192.168.18.21:3100/loki/api/v1/push
scrape_configs:
- job_name: php-log
static_configs:
- targets:
- localhost
labels:
job: php_logs
__path__: /opt/loki/php/*log # docker運行時已經把宿主機的目錄 /opt/
映射給了promtail 容器的/opt/,所以這個地方可以直接訪問log文件
- job_name: tomcat-log
static_configs:-targets:-localhost
labels:
job: tomcat_logs
__path__:/opt/loki/tomcat/*log # docker運行時已經把宿主機的目錄 /opt/ 映射給了promtail 容器的 /opt/,所以這個地方可以直接訪問log文件
Loki配置文件 vim /root/elk/loki-local-config.yaml
參考官方
具體實例如下:
auth_enabled: falseserver:
http_listen_port:3100ingester:
lifecycler:
address:192.168.18.21ring:
kvstore:
store: inmemory
replication_factor:1final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:- from: 2020-09-02store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory:/tmp/loki/index
filesystem:
directory:/tmp/loki/chunks
limits_config:
enforce_metric_name:falsereject_old_samples:truereject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period:0table_manager:
chunk_tables_provisioning:
inactive_read_throughput:0inactive_write_throughput:0provisioned_read_throughput:0provisioned_write_throughput:0index_tables_provisioning:
inactive_read_throughput:0inactive_write_throughput:0provisioned_read_throughput:0provisioned_write_throughput:0retention_deletes_enabled:falseretention_period:0
啟動容器
Docker-compose up -d
總結
以上是生活随笔為你收集整理的promtail 配置详解_基于loki+promtail+grafana技术的日志集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: clickhouse建库_ClickHo
- 下一篇: echo字符集 shell_Xshell