Grafana Alloy
原本我一開始是考慮要先研究怎麼使用grafana promtail把Log傳到Loki的, 但我在Promtail的文件上面看到,promtail 的功能已經完整了,未來新的功能,只會被加到Grafana Alloy上面。
在這邊我才知道,Alloy應該是比較新的,並且擁有更多的功能。Alloy除了可以偵測logs,還提供把一些系統指標抓取起來的功能。 所以最後想說既然要學,那我就先來學Alloy好了。
Components
Alloy的功能是圍繞在三種component上,運用以下三種component來做到把資料收集、處理、寫出去:
-
collector: 把資料收集起來
-
transformer: 對資料做額外處理
-
writer: 把資料寫出去
例如:我們可以利用loki.source.file 來偵測log檔案的內容變動,並收集起來,傳遞給loki.writer,把資料寫到Loki server上。
loki.source.file "foo_file" {
targets = [{__path__ = "/tmp/foo.txt"}]
forward_to = [loki.write.local.receiver]
}
loki.write "local" {
endpoint {
url = "loki:3100/loki/api/v1/push"
}
}
Collector
Alloy提供不同的Collector,讓我們能收集不同的logs。例如可以從檔案、HTTP、gRPC、message queue收集logs。
Transformer
Alloy提供不同的transformer,來讓我們對於collector收集到的logs做額外的處理,例如加上額外的metadata、過濾某些logs、壓縮整理logs,讓他更好傳輸到Loki上。
Writer
就是負責把收集好的logs送出去的元件,Grafana Alloy除了提供寫到Loki之外,也有提供不少寫到其它服務的Writer,例如Kafaka。
這邊是Alloy支援的Component 列表: components list
介紹完畢了,接下來就是開始安裝了
安裝
我是直接照著官網上面的做法,在macOS上面使用homebrew來安裝的。
- 首先,先把grafana的tap加到我的home brew上
brew tap grafana/grafana
- 再來就是使用home brew來安裝了
brew install grafana/grafana/alloy
這邊要注意的是,Alloy是一個背景作業的程式,他會一直執行監控要監控的目標。但因為我只是要在需要的時候打開,所以我會在需要使用的時候才打開,平常的時候會關掉它。
打開的指令
brew services start alloy
關掉的指令
brew services stop alloy
設定
接下來就要進入到重要關頭了,也就是設定Alloy的pipeline怎麼接。這個設定要寫在config.alloy
這個檔案裡面。
不同安裝方式的config.alloy
位置都不太一樣,像是home brew 安裝的Alloy會被放在/opt/homebrew/etc/alloy/config.alloy
。
我們可以在這個設定裡面,利用components,來組出我們希望Alloy執行的pipeline。
例如我們可以讓Alloy監控 /tmp/foo.txt 當它的內容有變更的時候,就把記錄寫到Loki上。
loki.source.file "foo_file" {
targets = [{__path__ = "/tmp/foo.txt"}]
forward_to = [loki.write.local.receiver]
}
loki.write "local" {
endpoint {
url = "loki:3100/loki/api/v1/push"
}
}
這邊要注意的地方是,對於Alloy的每個元件,我們都可以命名,並且會擁有一個完整的名稱。
例如loki.write “local” 會命名一個loki.write的component叫做local。 它會有個完整名稱叫做 loki.write.local ,這個名稱可以用來在別的component上面使用
(但只有被設計為Export的欄位可以被使用。)
以上面的例子來說就是
-
loki.source.file.foo_file藉由foward_to來指定,指定說要把收集到的資料,送到loki.wrti.local.receiver這個接口
-
loki.write.local會把receiver接口收到的資料,送到loki:3100/loki/api/v1/push上面。
接下來,設定完config.alloy
後,我們就可以讓Alloy來重新載入設定了
用Debug Web來重新載入設定
首先連到Alloy的debug web界面:http://localhost:12345
要注意,它預設只能在架設Alloy的機器上,使用localhost來存取到,避免把secret的資料從debug資訊中暴露出去。
重新讀取設定,只要request這個頁面即可 http://localhost:12345/-/reload
成功重新讀取設定,會顯示reloaded的訊息。
如果有遇到config有寫錯,可以在存取reload頁面的時候,看到解析失敗的訊息。
如何確定有正確運作
可以到Alloy的log去檢查
以macOS homebrew安裝的Alloy的log,會被放在 /opt/homebrew/var/log 裡面。
可以在裡面查看alloy.err.log
、alloy.log
來看看是否有正常收集資料、處理資料、傳輸資料到Loki(或目的地)去。