iT邦幫忙

2021 iThome 鐵人賽

DAY 30
2
Software Development

系統與服務雜談系列 第 30

Log Agent - Fluent Bit Output + Loki + Grafana

Fluent bit回顧
Log Agent - Fluent Bit 簡介
Log Agent - Fluent Bit 安裝與常見架構模式
Log Agent - Fluent Bit Service配置與內建 API
Log Agent - Fluent Bit Input元件 與 Tail淺談
Log Agent - Fluent Bit Parser元件
Log Agent - Fluent Bit Multiline Parsing

日誌收集顯示系統 Grafana + Loki

Day20分布式可觀測性 Logging 淺談時,
我們曾提到Grafana家族有Grafana + Loki, 能用來存放與展示Log.
這兩個元件的介紹, 日後有機會在深入.
今天先來使用這兩個元件加上Fluent Bit收集到的Log, 來做展示跟搜尋.

先透過Docker Compose快速建立Grfana + Loki

version: '3'
services:
  loki:
    image: grafana/loki:2.3.0
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false

執行啟動
docker-compose up -d

登入Grafana後, 左邊菜單選擇Configuration->Data Sources->Add data source
然後在URL輸入http://loki:3100/
按下Save & Test
出現Data source connected and labels found.表示Grafana成功連上Loki

Fluent Bit - Output

Fluent Bit在Output上也提供非常多的Plugins,
能輸出到像是Prometheus、CloudWatch、Datadog,Elasticsearch...

這裡因為我們目標是把Fluent Bit收集到的Log, 寫到Loki做儲存
所以這裡選擇Loki這Output Plugin

Parameters

  • host
    • Loki的hostname或是IP
    • 預設是127.0.0.1
  • port
    • Loki的TCP port
    • 預設是3100
  • labels
    • 就自己添加定義的label_key=value
    • 我自己比較常用來把主機名稱給加在這
  • line_format
    • 就送到Loki時的格式, 有JSON和KVP
    • 預設是JSON

加入Loki的Output進去

[OUTPUT]    
    name                   loki    
    match                  *    
    host                   loki   
    port                   3100    
    labels                 job=demo        

啟動FLuent BIt後
我們來到Grafana左邊選單的Explore這裡
左上角選擇Loki
https://ithelp.ithome.com.tw/upload/images/20211014/20104930XmV9IhaJdA.png

來到Log browser會看到job有出現剛剛的demo這label, 選擇demo, 然後選擇show logs
https://ithelp.ithome.com.tw/upload/images/20211014/20104930mgrT5M8gT8.png

就會看到上一篇的Log出現在此了.
然後來簡單介紹一下Log搜尋語法 LogQL

LogQL

LogQL => Log Query Language

Log Pipeline

LogQL也有類似Linux Pipe管線的概念
|
command1 | command2 | command3
後面的command收到的輸入都是前一個command的輸出結果

也能來用反向來過濾
!

Log FIlter Expression

剛剛的Pipe加上Filter就能達到過濾或比對的功能
符號就2種=~

  • =用來表示包含該字串
  • ~用來表示後面的字串其實是Regex pattern

我們把兩者合併

  • |= Log包含該字串
    https://ithelp.ithome.com.tw/upload/images/20211015/20104930tTGe32EFvY.png
  • != Log內不包含ㄍ字串
    https://ithelp.ithome.com.tw/upload/images/20211015/20104930GLCdDREXww.png
  • |~ Log內能匹配到這Regex
  • !~ Log的結果不包含這Regex所匹配到的

還有很多玩法, 能參考LogQL官網

本日心得

就是Fluent Bit + Loki + Grafana真的是很強大的一套分布式可觀測性Log服務
加上現在SRE或運維其實也很多都用Grafana,
如果Log也能用同一套展示面板, 其實在管理設定與學習上就簡單多了.
不過Fluent Bit + Loki + Grafana相對於ELK來說可能沒那樣穩定, 畢竟才出來市場相對沒那麼久.
但這套相對於ELK所吃的記憶體就真的少很多了

Fluent Bit真的是很不錯的服務, K8S也有用這個在收集跟處理各容器的Log, 幾乎常見的場景都適用.
期待大家一起把玩, 一起分享與學習.


挑戰心得

今年的鐵人賽挑戰到此完成了.
剛轉換工作, 很多還在適應與學習. 脫離了習慣已久的開發環境與工具.

今年到最後一天才決定開賽. 雖然每天都面離斷賽危機.
就每天硬著頭皮下班開始開官網學習, 並寫成文章.
這次很多部份不夠詳細與深入, 接著一年的時機要繼續深入學習.

感謝各位的閱讀.
明年再見/images/emoticon/emoticon08.gif


自己的筆記

Grafana

Viewer權限的帳號如果想看到Expolre工具, 需要在config開啟viewers_can_edit
configuration-viewers-can-edit


上一篇
Log Agent - Fluent Bit Multiline Parsing
下一篇
Story Telling - 簡易有效的討論
系列文
系統與服務雜談33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
Mandy
iT邦新手 3 級 ‧ 2021-10-15 03:49:33

賀 完賽!

雷N iT邦研究生 1 級 ‧ 2021-10-15 08:45:38 檢舉

謝 師姑

1
Kuma
iT邦新手 3 級 ‧ 2021-10-15 12:10:13

恭喜完賽!

雷N iT邦研究生 1 級 ‧ 2021-10-15 12:37:26 檢舉

謝 Kuma哥

1

恭喜完賽,很多有趣的經驗談~

雷N iT邦研究生 1 級 ‧ 2021-10-20 11:03:27 檢舉

謝謝 我也有在玩GO 改天能交流

我要留言

立即登入留言