Nginx Upstream 嘗試請求,重試請求
http { upstream ups { server 192.168.1.1 max_fails=1 fail_timeout=10s; server 192.168.1.2 max_fails=1 fail_timeout=10s; server 192.168.1.3 max_fails=1 fail_timeout=10s; keepalive 1000; } server { listen 80; server_name _; location / { proxy_next_upstream error timeout; proxy_next_upstream_tries 0; proxy_pass http://ups; } } } 配置說明 max_fails=1 fail_timeout=10s 每 10 秒計數到一次失敗,節點判定為壞點 10秒鐘 以此類推 當 max_fails=0 時,停用失敗計數器,即永遠不會判定壞點 proxy_next_upstream error timeout 那些請求狀態會被判定失敗,計算到 max_fails 的計數器 可選的項目有: error timeout invalid_header http_500 http_502 http_503 http_504 http_403 http_404 http_429 non_idempotent off proxy_next_upstream_tries 0 upstream servers 嘗試請求的次數 ...
Vscode terminal ctrl + p 關閉 quckopen
Vscode Terminal control + p 無法切換前一個命令 常用的 terminal 工具原始設定使用 ctrl + p 熱鍵,切換到上一個命令。 但在 vsocde 裡的 terminal 會變成 quick open 如果想讓熱鍵可以是切到上一個命令可調整 Preferences > Setting > 搜尋框輸入 terminal.intergrated.commandToSkipShell > Add item -workbench.action.quickOpen
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 供每個節點存取。 (下述的範例以 cluster 為原則) ...
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 ...
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 指令並不會成功。 如果路徑確實存在也不會報錯。 ...
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 的命令 ...
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 填入上方所建立的) ...