一.需求來源
公司之前是有使用elk日誌系統的,由於elk太重,且成本高,不得不拋棄.尋求輕量級日誌系統--->Loki
二.Loki 介紹
Loki是受Prometheus啓發由Grafana Labs團隊開源的水平可擴展,高度可用的多租戶日誌聚合系統。 開發語言: Google Go。它的設計具有很高的成本效益,並且易於操作。使用標籤來作爲索引,而不是對全文進行檢索,也就是說,你通過這些標籤既可以查詢日誌的內容也可以查詢到監控的數據籤,極大地降低了日誌索引的存儲。系統架構十分簡單,由以下3個部分組成
- Loki 是主服務器,負責存儲日誌和處理查詢 。
- promtail 是代理,負責收集日誌並將其發送給 loki 。
- Grafana 用於 UI 展示
只要在應用程序服務器上安裝promtail來收集日誌然後發送給Loki存儲,就可以在Grafana UI界面通過添加Loki爲數據源進行日誌查詢(如果Loki服務器性能不夠,可以部署多個Loki進行存儲及查詢)。作爲一個日誌系統不關只有查詢分析日誌的能力,還能對日誌進行監控和報警
二.Loki架構圖
promtail收集並將日誌發送給loki的 Distributor 組件
Distributor會對接收到的日誌流進行正確性校驗,並將驗證後的日誌分批並行發送到Ingester
Ingester 接受日誌流並構建數據塊,壓縮後存放到所連接的存儲後端
Querier 收到HTTP查詢請求,並將請求發送至Ingester 用以獲取內存數據 ,Ingester 收到請求後返回符合條件的數據;
如果 Ingester 沒有返回數據,Querier 會從後端存儲加載數據並遍歷去重執行查詢 ,通過HTTP返回查詢結果
四、與 ELK 比 較
- ELK雖然功能豐富,但規模複雜,資源佔用高,操作苦難,很多功能往往用不上,有點殺雞用牛刀的感覺。
- 不對日誌進行全文索引。通過存儲壓縮非結構化日誌和僅索引元數據,Loki 操作起來會更簡單,更省成本。
- 通過使用與 Prometheus 相同的標籤記錄流對日誌進行索引和分組,這使得日誌的擴展和操作效率更高。
- 安裝部署簡單快速,且受 Grafana 原生支持
五.安裝環境 與 部署
服務器 |
系統 |
IP |
Loki主機 |
Centos 7.8 |
192.168.82.217 |
promtail主機 |
Centos 7.8 |
192.168.82.217 |
Step 1.下載安裝軟件
$ curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/loki-linux-amd64.zip"
$ curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/promtail-linux-amd64.zip"
$ mkdir /usr/local/loki
$ unzip -q loki-linux-amd64.zip -d /usr/local/loki/
$ unzip -q promtail-linux-amd64.zip -d /usr/local/loki/
Step 2.1 Loki 配置文件
$ loki-local-config.yaml
auth_enabled: false
server:
http_listen_port: 3100 #監聽的端口
ingester:
lifecycler:
address: 192.168.82.217
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: 2020-07-29
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory: /usr/local/loki/data/index #自定義boltdb目錄
filesystem:
directory: /usr/local/loki/data/chunks #自定義filesystem目錄
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false
retention_period: 0s
Step 2.2 Promtail 配置文件
$ promtail-local-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /data/tmp/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: nginx
static_configs:
- targets:
- localhost
labels:
job: nginxlogs
__path__: /var/log/*log #自定義被採集的日誌路徑(支持正則表達)
Step 3.啓動 Loki Promtail
- Loki 監聽端口3100 promtail監聽端口9080
$ nohup /usr/local/loki/loki-linux-amd64 -config.file=/usr/local/loki/loki-local-config.yaml &
$ nohup /usr/local/loki/promtail-linux-amd64 -config.file=/usr/local/loki/promtail-local-config.yaml &
$ netstat -nvlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 15261/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 22765/master
tcp6 0 0 :::3100 :::* LISTEN 65217/loki-linux-am
tcp6 0 0 :::33313 :::* LISTEN 65227/promtail-linu
tcp6 0 0 :::9095 :::* LISTEN 65217/loki-linux-am
tcp6 0 0 :::22 :::* LISTEN 15261/sshd
tcp6 0 0 :::9080 :::* LISTEN 65227/promtail-linu
tcp6 0 0 ::1:25 :::* LISTEN 22765/master
Step 3.安裝grafana
1.安裝依賴
$ yum install initscripts fontconfig
$ yum install freetype
$ yum install urw-fonts
2.下載 & 安裝
$ wget https://dl.grafana.com/oss/release/grafana-6.7.4-1.x86_64.rpm
$ rpm -ivh grafana-6.7.4-1.x86_64.rpm
3.啓動grafana,監聽端口3000
$ sudo /bin/systemctl daemon-reload
$ sudo /bin/systemctl enable grafana-server.service
$ sudo /bin/systemctl start grafana-server.service
$ netstat -nvlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 15261/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 22765/master
tcp6 0 0 :::3100 :::* LISTEN 65217/loki-linux-am
tcp6 0 0 :::33313 :::* LISTEN 65227/promtail-linu
tcp6 0 0 :::9095 :::* LISTEN 65217/loki-linux-am
tcp6 0 0 :::22 :::* LISTEN 15261/sshd
tcp6 0 0 :::3000 :::* LISTEN 65513/grafana-serve
tcp6 0 0 :::9080 :::* LISTEN 65227/promtail-linu
tcp6 0 0 ::1:25 :::* LISTEN 22765/master
六.訪問grafana
- URL: http://192.168.82.217:3000/
- 首次登陸默認用戶名和密碼 admin,登錄後會提示修改密碼
1.進入Data Sources添加數據源,選擇Loki,URL爲loki的地址: http://192.168.82:3100 ,Name自己定義
2.進入Explore就可以搜索查詢日誌了,日誌查詢由兩部分組成:日誌流選擇器和搜索表達式.
出於性能原因,需要先通過選擇日誌標籤來選擇日誌流,查詢字段Log labels
旁邊的按鈕顯示了可用日誌流的標籤列表.
標籤匹配符:
=
完全相等。
!=
不相等。
=~
正則表達式匹配。
!~
不進行正則表達式匹配。{job="nginxlogs",filename="/var/log/yum.log"}