Loki 使用 Ruler's Record Data 處理大量日誌統計

Loki 環境說明 Loki 版本 2.9.2 Loki 使用 3台 Monolithic mode 的 cluster ring kvstore 使用 memberlist Storage 在 AWS S3 情境說明 目前使用 Loki 記錄 nginx 的訪問日誌, 日誌有點份量之後,Loki 原生的統計函數變得相當吃緊,查詢請求動不動就跑到 CPU 100% 然後 timeout。 嘗試過將機器規格提升到兩台 32 core 的機器,雖然可以感覺到查詢速度有變快,但效果還是非常不理想。 沒人查詢時基本上 CPU 也是整個空閒,相當的浪費資源。 官方文件上有看到 record data 的做法。 基本上是利用 ruler 模組,定期執行統計,記錄到 prometheus 或其它支援的 storage,不用每次都跑一堆計算,可以改拉 prometheus 預算好的資料。 下圖取自 record data 後拉取的資料 (24小時有 272M筆訪問記錄,284GB) Ruler 單機的 Loki 你可以將 rule 規則存放在 Disk 中,直接編輯, 如果是 cluster 可以啟用 rule api 來管理規則,將規則存放到類似 S3 的 storage 供每個節點存取。...

October 31, 2023

Windows rsync (cwRsync) 權限排序不正確

Windows 使用 rsync 引發的權限問題 如果你在 Linux 上使用過 rsync 指令,多少需要瞭解一下檔案權限的問題。 在 Windows 上 Rsync,可以透過一些模擬 Linux API 的指令來實現 這裡用到的是 cwRsync,可以到官網下載 rsync client 純指令版 (rsync-client 是 free 的,其它有些東西可能需要付費,看自己的需求) 這裡列舉幾個我自己在 Windows 上遇到的權限問題 rsync 後的檔案或資料夾,無法開啟或刪除檔案 資料夾安全性顯示 權限排序不正確 跟 null sid 權限問題處理 1. 無法開啟或刪除資料夾 可以試著在執行 rsync 指令時加上參數 --chmod=ugo=rwX -r 來改變檔案的權限 rsync -avz --chmod=ugo=rwX -r <source> <destination> 2. 資料夾安全性顯示 權限排序不正確 跟 null sid 如果權限排序不正確,可以試著在 cwrsync/etc 底下加入 fstab 檔, 設定 noacl 來排除,具體可以參考 refer 連結,範例如下: # /etc/fstab none /cygdrive cygdrive binary,noacl,posix=0,user 0 0 正確權限示意圖(沒有出現 null sid)...

May 3, 2023

Windows OS cd 指令,你應該注意的事 (device 切換)

場景 事情是這樣的, 某天我弄了一個 windows 的 bat 檔,預計使用 rsync 將檔案同步到 windows 本地目錄。 於是搞了個腳本,類似這樣, dirpath 則以環境變數的方式代入。 cd %dirpath% rsync --delete remote local 想了想, 如果前面程序如果失敗,沒有將 dirpath 建立出來, 我這個 rsync –delete 就可怕了,於是加了一行判斷 cd 失敗就終止。 cd %dirpath% if %ERRORLEVEL% NEQ 0 exit %ERRORLEVEL% rsync --delete remote local 本機測試完後,開開心心的到其它機器去測試。 結果開始噴 rsync delete 一些奇奇怪怪的檔案。 我心裡想 cd 失敗的話, 沒有 pathdir 不是應該會退出程序嗎? 細查後 dirpath 資料夾也有正常建立, 為什麼 cd 不成功也沒有 return error code 呢? 實測 原因是我自己電腦上測試的時候都在 c 碟上面進行, 當涉及 device (c, d 碟) 切換的時候, cd 指令並不會成功。...

April 17, 2023

Systemd Timer 執行秒級排程,可替代 crontab

crontab 每 30 秒執行 大家應該都有用過 crontab 的經驗吧? crontab 每次執行的最小單位就是分鐘,如果遇到秒級需求的任務排程。 很常見到類似底下的 crontab 的設定。 設定上相當方便,不過我們可以認識一下另一種 systemd timer 的作法。 或是你可以想像一下,如果 5秒要執行一次,crontab 會長什麼樣子。 * * * * * dosomething * * * * * sleep 30; dosomething systemd timer 特點 使用 timer 來執行 service,可以避免上一個任務還沒進行完,又開始一個新的任務。 systemd timer jobqueue.service / systemd service file 建立一個 jobqueue.service 設定檔,內容如下: [Unit] Description=Execute jobqueue [Service] Type=simple ExecStart=/bin/bash -c '/usr/bin/date >> /tmp/date.log' 建立完成後重載一下 systemctl daemon-reload 接著當你執行 systemctl start jobqueue.service 時,就會執行一次 ExecStart 的命令...

April 15, 2023

Grafana 備份工具 - grafana-backup-tool

説明 最近剛好要做 Grafana 的資料遷移, 理論上遷移時將 grafana 的 sqlite 一起搬過去應該是沒問題, 但牽涉到版本升級,有點不確定性。 剛好看到一個不錯的工具 grafana-backup-tool,是透過 api 的方式進行備份還原, 正好試用看看,平常備份也可以使用。 情境 Grafana 資料遷移 - 域名為假設域名 原站 - http://grafana.example.com (version: 6.4.3) 新站 - http://new.grafana.example.com (version: 7.3.4) 步驟 一. 安裝 grafana-backup-tool 隨便找一台可以訪問到 Grafana site 的 Linux pip install grafana-backup 二. 建立 API Token 在要備份 與 要還原的 Grafana 都建立 API KEY 三. 設定檔 建立備份目標的設定檔 grafana.json (token 填入上方所建立的) { "grafana": { "url": "http://grafana.example.com", "token": "{YOUR_GRAFANA_TOKEN}", } } 建立還原目標的設定檔 grafana-new.json (token 填入上方所建立的)...

April 1, 2021

Windows 10 設定好用的拼音輸入法

前言 已經好幾年沒使用 Windows 電腦工作了,筆者目前公司工作機又是 Windows OS。 一直沒有在 Windows 上找到好用的拼音輸入法,需要中文輸入的時候整個手殘(兩年前嘗試用拼音輸入法取代注音,我現在連注音都打不好了 XD) 總之前幾天發現了像在 Mac 上一樣好用的拼音輸入法, 跟大家分享一下,如果你剛好需要的話。 微軟注音的拼音輸入法 對比 微軟拼音的拼音輸入法 標題很繞口我知道,不過不是很重要。。。 微軟注音 的拼音輸入法 示意 微軟拼音 的拼音輸入法 示意 功能比較 微軟注音 的拼音輸入法 選字很難選 無法拼音校正 按 Enter 確定 微軟拼音 的拼音輸入法 按空白鍵確定 使用 [ 跟 ] 符號切換待選字 (比上下鍵方便很多) 可連續輸入很多字再空白鍵確定 可以中英文混打,不需切換輸入法 可以輸入頭一個字碼,組合出句子 設定方式 微軟注音 > 漢語拼音 原本的微軟注音的拼音輸入法應該是這樣設定 微軟拼音 拼音輸入法 繁體 設定 主要就是使用 Windows 內建 中國拼音輸入法的拼音,在設定成繁體即可

March 26, 2021

Ansible Synchronize Why Permission Denied

關於 ansible 的 Synchronize 模組問題 關於 ansible 的使用上,synchroize 是一個很棒的模組, 如果大量的檔案想要複製到目標機器上的話,也許有其他模組可以達到類似的需求, 但以效能來說,synchroize 這個模組大概會是首選,因為其底層是透過 rsync 的指令傳輸資料。 不過 synchroize 這個模組卻是時靈時不靈。 筆者有一陣子很困擾的問題是,為什麼整份 ansible script 已經測試那麼多次了。 執行到有 synchroize 這個模組有時還是會報出 permission deied。 become_user: root, become_method: sudo, 跟模組參數試了又試。 還是很難理解到底那個環節出了問題。 發現問題 一般來說 ansible 使用上都是透過 ssh 控制遠程的目標伺服器。 筆者的 asnible script 寫了很多安裝佈署的步驟,其中當然也包含了 synchroize 模組。 為了符合單機離線安裝的情境,做這類佈署時我會直接將 inventory 的主機直接指定本地端的 IP, 直接在本地執行安裝腳本。 一台 Server 可能會有多個網卡跟IP(127.0.0.1 or 192.168.x.x) 就在某次我將 inventory 目標主機指定成 127.0.0.1 果然發生一樣的問題。 當我發現目標機器是 127.0.0.1 時就會出問題, 目標機器 是 192.168.1.10 (一樣是本地端IP) 卻是正常的。 我大概可以猜測 synchroize 模組針對 localhsot or 127....

January 28, 2021