Grafana + Loki + Promtail 安裝紀錄( Windows Event Log 為範例)
安裝 Grafana
Grafana 是一個跨平台、開源的資料視覺化網路應用程式平台,使用者可透過組態設定來連接多個資料來源,並且在此平台內顯示資料圖表或警告等等,例如,將各伺服器的事件檢視器的 Log 統一發送到 Grafana 監控,底下為安裝步驟的紀錄。
- 下載 grafana-10.2.2.windows-amd64.msi OSS 版本 並安裝 。
- 因預設使用 3000 Port 會與我另外一個服務 Rendertron 衝突,故需要調整一下 Port,這邊用 3333,若沒有這個問題,可略過此步驟。
- 調整設定檔 C:\Program Files\GrafanaLabs\grafana\conf\defaults.ini 內,找到 http_port 並調整為 3333。
# The http port to use # http_port = 3000 http_port = 3333
- 若有需要開啟外部連線,也記得要調整 defaults.ini 的設定,若只有不提供外部使用可忽略此步驟。
# The public facing domain name used to access grafana from a browser domain = localhost # 若直接對外開放需要改成你的 Domain # Redirect to correct domain if host header does not match domain # Prevents DNS rebinding attacks enforce_domain = true # The full public facing url # 若有使用 reverse proxy server 進行轉址 # 也請改成你的對外網址,顯示的 http 協定或 port 可能不正確 root_url = https://你的Domain # root_url = %(protocol)s://%(domain)s:%(http_port)s/
- 郵件設定,若你需要使用忘記密碼功能,defaults.ini 需進行此設定。
[smtp] enabled = true host = smtppro.zoho.com:587 # 改成你的 email 服務商的設定 user = 你的郵件帳號 # If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" password = ***** ;cert_file = ;key_file = ;skip_verify = false from_address = 你的郵件帳號@com.tw from_name = PrimeEagleX Grafana ;ehlo_identity = ;startTLS_policy =
- 若要使用 Google 登入,defaults.ini 需進行此設定,詳細資訊可參考 https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/google/。
[auth.google] name = Google icon = google enabled = true allow_sign_up = false # 允許使用者透過 Google 驗證進行註冊,若要禁止所有使用者都可以直接註冊,此項目記得關閉 auto_login = false client_id = CLIENT_ID client_secret = CLIENT_SECRET
- 若要使用 AD 登入,需進行底下設定。
- 舉例說明 AD 的結構如下圖,如果要找到 lawrence_shen 的 dn,則必須要這樣設定 cn=lawrence_shn,ou=資訊處,ou=高雄,ou=Taiwan,dc=pex,dc=org,關於 AD 的相關說明可參考 https://www.tpisoftware.com/tpu/articleDetails/1265。
- 必須要到 defaults.ini 開啟設定,請注意 config_file 的設定值,因為我的環境使用 Windows,所以需調整成實際的路徑。
[auth.ldap] enabled = true # config_file = /etc/grafana/ldap.toml config_file = C\Service\GrafanaLabs\grafana\conf\ldap.toml allow_sign_up = true # 允許使用者透過 AD 驗證進行註冊,若要禁止所有使用者都可以直接註冊,此項目記得關閉
- 進行 ldap.toml 的基本設定。
2~3 行,AD 伺服器設定。
7~8 行,能取得 AD 相關資訊的 DN 帳號設定。
12~15,登入時的 AD 設定。
20~25,成功登入寫入的資訊。[[servers]] host = "192.168.0.100" # 調整成你的 AD Server IP port = 389 # 依需求自行調整成 AD Server Port # 這個設定是要讓 Grafana 可以讀取到組織資訊帳號的 DN 位置 # 因為 syncorg的 AD 我放在 Users 底下,實際的 DN 位置須根據你的 AD 來設定 bind_dn = "cn=syncorg,cn=Users,dc=pex,dc=org" bind_password = 'syncorg 的密碼' # 使用者登入要查詢的 AD 屬性欄位,我要根據 AD 帳號進行登入,所以調整成底下的設定 # 實際要驗證的欄位須根據你的 AD 屬性來決定,預設是 "(uid=%s)" search_filter = "(sAMAccountName=%s)" # An array of base dns to search through search_base_dns = ["dc=pex,dc=org"] # Specify names of the ldap attributes your ldap uses # 使用者註冊後,Grafana 這裡對應的值來當作帳號的相關資訊 [servers.attributes] name = "givenName" surname = "sn" username = "cn" member_of = "memberOf" # email = "email" email = "mail" # 要小心,我的環境這邊的屬性是 mail,也要記得調整
- ldap.toml 的權限設定,因為比較重要獨立說明,若有指定 [[servers.group_mappings]],就必須設定權限,因此入不須的權限也要記得備註此設定,其餘相關說明如下。
# 權限設定 [[servers.group_mappings]] # 系統管理員的 DN 群組,我的管理者統一放在 domain admins 底下 group_dn = "cn=domain admins,cn=users,dc=pex,dc=org" # 登入後的權限,預設有設定 Admin、Editor、Viewer org_role = "Admin" # To make user an instance admin (Grafana Admin) uncomment line below # Grafana Admin 如下說明 grafana_admin = true # Grafana v10.1 版開始,會強制同步 organization role # 管理員無法從後台管理介面設定登人人員的 organization role # 如果有需要調整登入人員的 organization role,需要關閉強制同步的設定(改成 true) skip_org_role_sync = false
- 若上述設定成功後,可以到Home → Administration → Authentication → LDAP,進行相關資訊確認,下圖為我的帳號的權限示意圖,綠框的部分只要符合 org_role = Admin 就擁有此權限,但紅框的部分則必須設定 grafana_admin = true 才會有權限。
- 一般管理者 & Grafana 管理者的部分差異可參考官網說明,在管理端可看底下示意圖。
一般管理者權限 Grafana 管理者權限 - 重新啟動服務。
- 可用底下網址來測試服務是否正確啟用。
http://localhost:3333
- 第一次登入畫面輸入的帳號密碼預設都是 admin 。
- 連結 Loki DataSource,若有問題可參考 https://github.com/grafana/loki/issues/4699。
- 若使用 IIS 來當作 Reverse proxy 需進行底下 web.config 的設定,相關設定說明可參考此處。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rule name="GrafanaLabs" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" pattern="你的網域" /> </conditions> <action type="Rewrite" url="http://localhost:3000/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
- 若設定完 Reverse proxy 後登入收到 origin not allowed 的錯誤訊息,此為 IIS Issue,可執行底下的語法來排除,詳細說明請參考 此處 說明。
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
使用雲端服務版本
- 註冊 Grafana 帳號並登入服務平台,例如 https://lawrence8358.grafana.net/a/cloud-home-app。
- 建立 Loki Data Sources,並取得 Basic Auth Details 內的帳號密碼,程式裡面需要用到。
- 設定 Explore 查詢條件,例如查詢錯誤如下圖所示。
- 亦可將此查詢條件設定到 Dashboard 內方便下次查看。
- 預設每次查詢最大筆數為 1000,若需調整也可修改此設定。
安裝 Loki 服務
Loki 主伺服器,負責攝取和儲存日誌以及處理查詢(如下圖流程),安裝步驟如下說明 https://grafana.com/docs/loki/latest/installation/local/
- 下載執行檔 Loki v2.8.6 loki-windows-amd64.exe.zip 並且解壓縮後放置指定資料夾 ex. D:\inetpub\Loki。
- 下載 loki-local-config.yaml ,並放置到相同資料夾路徑。
- 修改 Log 的儲存資料夾(非必要,若有需求再調整即可)。
auth_enabled: false server: # 對外端口 http_listen_port: 3100 grpc_listen_port: 9096 common: instance_addr: 127.0.0.1 # path_prefix: /tmp/loki path_prefix: D:\Service\GrafanaLoki\temp storage: filesystem: # chunks_directory: /tmp/loki/chunks # rules_directory: /tmp/loki/rules chunks_directory: D:\Service\GrafanaLoki\temp\chunks rules_directory: D:\Service\GrafanaLoki\temp\rules replication_factor: 1 ring: kvstore: store: inmemory query_range: results_cache: cache: embedded_cache: enabled: true max_size_mb: 100 schema_config: configs: - from: 2020-10-24 store: tsdb object_store: filesystem schema: v12 index: prefix: index_ period: 24h # 保留設定,必須為 24h 的倍數 table_manager: retention_deletes_enabled: true retention_period: 168h ruler: alertmanager_url: http://localhost:9093 limits_config: # 每次查詢的最大條目數 # https://github.com/grafana/loki/issues/2854 max_entries_limit_per_query: 5000
- 啟動 loki .\loki-windows-amd64.exe --config.file=loki-local-config.yaml。
- 若要使用 Windows Service 來使用,請搭配 NSSM nssm install 開啟如下圖的設定,來註冊服務,註冊完成後記得要啟用服務。
- 可用底下兩個網址來測試 Loki 服務是否正確啟用。
http://localhost:3100/ready http://localhost:3100/metrics
- 更多 Loki 參數設定 https://grafana.com/docs/loki/latest/configure/。
- Loki 本身沒有授權機制(至少我沒查到),建議的方案是使用 Reverse proxy 來處理授權。
安裝 Promtail
Promtail 是一個代理程式,負責傳送本地端的日誌到私有的 Loki 或者是 Grafana Cloud,並安裝在想要監控的應用程式的機器中。
圖片來源 : https://medium.com/@jieshiun/%E5%A6%82%E4%BD%95%E5%B0%87-windows-event-logs-%E6%8E%A8%E9%80%81%E5%88%B0-grafana-loki-f07806c400ef |
- 下載執行檔 Promtail v2.8.6 promtail-windows-amd64.exe.zip 並解壓縮後放置指定的資料夾路徑,ex. D:\inetpub\Promtail。
- 在該目錄底下新增 promtail-local-config.yaml 文件,底下為抓取 Windows Event Log 為例,相關參數如下。
server: http_listen_port: 9080 grpc_listen_port: 0 log_level: "info" # 紀錄 Log 的等級,debug, info, warn, error,預設 info positions: filename: "./positions.yaml" clients: - url: http://localhost:3100/loki/api/v1/push scrape_configs: # 第一個任務 - job_name: windows windows_events: use_incoming_timestamp: true # 保留原始事件發生的時間戳 bookmark_path: "./bookmark-application.xml" eventlog_name: "Application" exclude_event_data: false # 排除 XML 事件數據 exclude_user_data: true # 排除 Windows 事件的用戶數據 xpath_query: '*' poll_interval: 3 # 檢查新事件的間隔,預設 3 秒檢查一次 labels: logsource: WindowsEventlog # 將 computer 變更成 host Tag(原標籤還是會保留) # relabel_configs: # - source_labels: ['computer'] # target_label: 'host' # 將指定的欄位貼上對應的標籤(方便後續 Grafana 查詢用) pipeline_stages: - json: expressions: Source: source Level: level LevelText: levelText - labels: Source: Level: LevelText:
- bookmark_path 負責記錄最後處理的事件,當 Promtail 重新啟動時,會從中斷的地方繼續讀取日誌。
<BookmarkList> <Bookmark Channel='Application' RecordId='183616' IsCurrent='true'/> </BookmarkList>
- 啟動 promtail .\promtail-windows-amd64 --config.file=promtail-local-config.yaml。
- 若要使用 Windows Service 來使用,請搭配 NSSM nssm install 開啟如下圖的設定,來註冊服務,註冊完成後記得要啟用服務。
參考連結
- grafana/loki
- Loki 儲存架構
- 透過NSSM建立Windows Services
- nssm 2.24 下載
- Running Loki and Promtail as a Windows service
- 如何使用 Loki 創建用於搜索 Windows 日誌的 Grafana 儀表板
- 如何將 Windows Event Logs 推送到 Grafana Loki
- Grafana Loki笔记07: Loki的存储和保留策略
- Grafana Loki筆記04: Promtail簡介與設定詳解
- 如何安裝及配置 Grafara Dashboard
- 如何使用 Loki 創建用於搜索 Windows 日誌的 Grafana 儀表板
- Grafana Dashboard 樣板下載
- Prometheus結合Grafana 自建系統狀態儀表板
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。