星期六, 9月 03, 2022

使用 azure cli 建立 Service principal 串接 Grafana 小記

使用 azure cli 建立 Service principal 串接 Grafana 小記


目前大家真的已經很泛用 Grafana 來呈現不同的監控資料, 然後 Azure Managed Grafana 也 GA 了


接下來看看能不能抓部份時間來 study 還有寫寫 Grafana 的筆記  :)


首先大家可能會搜尋到的是這篇 Azure 原廠的文件, 在 Grafana 中監視 Azure 服務


簡單來說, 要讓 Grafana 可以監視 Azure 的服務, 大概就是

  • 建立 Azure Service principal ( 應用程式註冊 )

  • 設定該 Service principal 用戶端密碼 ( 建立給 Grafana 使用的密碼 )

  • 在 AAD 內的角色指派, 針對該 Service principal 給予相關權限

    • Log Analytics 讀取者

    • 讀者


上述的動作肯定可以使用 Console 來達成, 但是有的時候 Console 不熟的人, 可能對上述的建立會比較苦手 ( 如果哪天介面又改變的話 ), 所以今天就使用 azure cli 來實作


首先登入 Azure Portal

接下來就使用 Cloud Shell 來進行相關操作


參考之前自己的文章


我們可以藉由以下指令來列出相關資訊, 看看之前有沒有使用 azure cli 建立過應用程式

$ az  ad  sp  list --output table 


  • 這樣可能會列出太多資訊, 所以過濾一下關鍵字



$ az  ad  sp  list --output table  |  grep  azure-cli


  • 從輸出的 azure-cli-202x-xx-xx-xx-xx-xx 就可以知道建立的時間


接下來使用 azure cli 來建立 Service Principal 


使用 az account 指令取得 subscription_id


$ az  account  show  --query  "{ subscription_id: id }"


{

 "subscription_id": "6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb"

}


使用以下指令建立 Service Principal 指定 Role 為 Log Analytics Reader, 並同時建立用戶端密碼


$ az  ad  sp  create-for-rbac --role  "Log Analytics Reader" --scopes  /subscriptions/6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb


輸出範例如下

{

  "appId": "83d5xxxx-xxxx-xxxx-xxxx-xxxxxxxxad2d",

  "displayName": "azure-cli-2022-09-03-13-08-28",

  "password": "5KN7Q~pygZIH5RbAGBSGz3Nx.bC4JSXUSjfQ-dvv",

  "tenant": "4cd3xxxx-xxxx-xxxx-xxxx-xxxxxxxxabd4"

}


  • az ad sp 指令可以用 -n 方式指定名稱, 但是我喜歡不指定名稱, 這樣我可以知道是何時建立

  • password 只會這個時候出現, 請記下來後續使用


之前的文章如果 Service Principal 密碼到期, 作法上可能會

  • 使用 az ad sp delete 刪除舊的認証, 然後再建立新的認証


這邊再紀錄另外一種方式, 直接重設 Service Principal 的用戶端密碼


接下來回到 Grafana 這邊


登入 Grafana

點選 Configuration -- > Data sources


點選 Add data source


搜尋 azure, 應該就會看到 Azure Monitor

點選 Azure Monitor



填入相關資訊



點選 Save & test

成功應該會看到相關訊息



大功告成

接下來就可以找時間針對 Azure 資源來觀察了


~ enjoy it




Reference


星期日, 6月 26, 2022

Terraform in openSUSE Leap 15.3 安裝小記

Terraform in openSUSE Leap 15.3 安裝小記


OS: openSUSE Leap 15.3


最近因為雲端的關係, 可能針對 Terraform 要多一點練習

今天紀錄一下 Terraform 在 openSUSE Leap 上面的安裝


Terraform 官網上的的安裝頁面, 是沒有列出 openSUSE Linux 的


查了一下 https://software.opensuse.org/package/terraform 上面的資料

  • Tumbleweed 的版本跟目前官方的版本 1.2.3 是一致的, 但是 Leap 15.3 的版本就太舊了



所以就打算使用 snapd 來安裝


可以參考我之前的 openSUSE leap 15.3 的文章


在已經安裝好 snapd 的情況下


# snap  install  terraform  --classic


terraform 1.2.3 from Jon Seager (jnsgruk) installed

確認安裝是否正常


> terraform  --version


Terraform v1.2.3

on linux_amd64



開始往 Terraform 邁進

~ enjoy it



References


星期日, 6月 19, 2022

container 設定時區整理小記

container 設定時區整理小記


OS: openSUSE Leap 15.3


這篇文章的起因是因為在測試 zabbix 經由 telegram 推送通知時

發現通知時間的部份是使用 UTC time, 如果想要收到通知的時候上面的時間符合目前的時間

想法上解法有 2 個方向

  • 使用自訂訊息的部份, 標示 Problem started 時間為 UTC

  • 將 container 內的時區訂為自己所在地區的時區


今天這篇文章就是整理將 container 內的時區設定為目前時區的小記


先整理一下實體主機 openSUSE Leap 15.3 時區相關資訊


系統預設時區設定觀察

# cat  /etc/sysconfig/clock 


DEFAULT_TIMEZONE="US/Eastern"


本地時區設定觀察

# ls  -l  /etc/localtime

lrwxrwxrwx 1 root root 33 Nov 28  2021 /etc/localtime -> ../usr/share/zoneinfo/Asia/Taipei


現在的作業系統可以使用 timedatectl 來觀察相關設定

# timedatectl 


               Local time: Sun 2022-06-19 08:17:36 CST

           Universal time: Sun 2022-06-19 00:17:36 UTC

                 RTC time: Sun 2022-06-19 00:17:36    

                Time zone: Asia/Taipei (CST, +0800)   

System clock synchronized: yes                        

              NTP service: active                     

          RTC in local TZ: no



當然在 openSUSE 內, 最方便的作法就是使用

# yast2  timezone 來設定 :)



接下來回到 container 的部份


參考網路上的文章


原則上可以使用  -e TZ=Asia/Taipei 方式來設定 container 內的時區

但是前題是要安裝相關套件, 整理如下

  • openSUSE

    • 安裝 timezone 套件

      • 有 tzselect 指令可以執行

  • CentOS

    • 安裝 tzdata

  • Ubuntu

    • 安裝 tzdata


實際驗證

> docker  run  -it  opensuse/leap:15.3   /bin/bash


dfc4994abd1d:/ # date

Sun Jun 19 00:30:22 UTC 2022


> docker  run  -it  -e  TZ=Asia/Taipei  opensuse/leap:15.3  /bin/bash


940407fada80:/ # date

Sun Jun 19 00:31:39 Asia 2022


  • 這邊可以觀察到, 雖然傳遞 -e TZ=Asia/Taipei, 目前顯示的時間還不是 local time

  • 預設沒有裝 timezone 套件, 然後容器內也沒有 /etc/localtime 檔案


嘗試自己來建立 container image 測試

以下是 Dockerfile 內容


FROM opensuse/leap:15.3

RUN zypper  install -y timezone


建立 container image


> docker  build  -t  sakana/testtimezone2  .


再次測試

> docker  run  -it  sakana/testtimezone2  /bin/bash


23460ce0b35f:/ # date

Sun Jun 19 00:37:43 UTC 2022


傳入時區

> docker  run -it  -e  TZ=Asia/Taipei  sakana/testtimezone2  /bin/bash


7c48052f9d9e:/ # date

Sun Jun 19 08:38:42 CST 2022


  • 這邊就可以發現時間顯示已經變成我們傳入的 Asia/Taipei


另外 centos:7 以及 ubuntu:latest 的 container image 我也測試過 ( 如果有安裝 tzdata 套件就可以設定時區 )


先記下來


~ enjoy it


Reference


星期六, 6月 04, 2022

使用 SendGrid 設定 zabbix media 進行告警通知小記

使用 SendGrid 設定 zabbix media 進行告警通知小記


Zabbix: 6.0 docker image



目的:  Zabbix 產生告警後, 可以透過 email 來接受告警與回覆的訊息


上一篇文章寫了 Zabbix Proxy 與自動註冊的設定

今天來寫如何透過 SendGrid 這個服務來進行告警 email 發送, SendGrid 的文章之前就有寫過, 可以參考


今天也觀察 SendGrid 服務是否與之前發送有沒有變化, 簡單紀錄一下

  • Simple sender 設定的部份, 今天不知道是否是使用 gmail 來當 sender 的關係, 該帳號要設定完 MFA 之後才能認証成功, 不像之前只要點選信件中的 link 就可以設定完成.  我是透過 SMS 來進行驗證, 台灣之星可以收到驗證簡訊.


如果希望 Zabbix 監控到問題發生的時候收到告警, 其實有很多種方式, 可以觀察 Administration 內的 Media types, 常見可能會有

  • Email / Email (HTML)

  • Slack

  • Telegram


今天來設定的是 Email 的部份


先簡單描述一下通知架構

  • Trigger Action ( Configuration -- > Actions -- > Trigger actions )

    • 設定觸發 Trigger 的時候, 會採取的行為

  • Media Type ( Administration -- > Media types  )

    • 設定各種 Media 類型, 這邊是將 SendGrid 設定為 smtp server 來傳送訊息

  • Users ( Administration -- > Users  )

    • 這邊設定的是 Media 的部份, 使用者要接收通知時要透過那一個 Media, 傳送給誰


首先我們來觀察 Trigger Action

登入 Zabbix 管理頁面


Configuration -- > Actions -- > Trigger actions


預設已經有 Report problems to Zabbix administrators

  • 預設狀態是 Disable, 其實只要啟動他就好


點選 Report problems to Zabbix administrators


觀察相關設定

預設只有設定名稱, 沒有設定特定條件, 也就是產生 trigger 就會觸發


點選 Operations



在 Operations 可以觀察到有設定 Send message to user groups: Zabbix administrators via all media Immediately



觀察設定


  • 預設會發送到 Zabbix administrators 使用者群組

  • Send only to  為 - All - 就是所有的 Media 


然後另外一個就是 Recovery operations, 有設定 Notify all involved


相關設定細節



這邊簡單小結一下

  • 如果有 Trigger -- > 使用 All Media 通知 Zabbix administrators 群組

  • 預設為 Disable, 所以只要啟用他就好 


啟用的方式

勾選 Report problems to Zabbix administrator -- > 點選 Enable


  • 確認 Status 為 Enabled



首先請參考之前的文章申請 SendGrid API Key 與密碼


接下來處理 Media 的部份

Administration -- > Media types


預設有很多 Media

我的處理方式是 Clone 了 Email ( HTML )

相關設定如下


  • 名稱的部份自訂訂定

  • Type: Email

  • SMTP server: smtp.sendgrid.net

  • SMTP server port: 465

  • SMTP helo: sendgrid.net

  • SMTP email: 輸入 SendGrid 設定的自訂 email


  • Connection security: 我選 SSL/TLS, 所以上面才會用 port 465

  • Authentication: Username and password

    • Username: apikey

    • Password: SendGrid 的 API Key 的密碼


最後來設定要被通知的對象

上面有提到, 預設的 Trigger action 會通知 Zabbix administrators 群組

如果去觀察 Zabbix administrator 群組, 預設就是 Admin 這個使用者



點選 Administration -- > Users

點選 Admin -- > 點選 Media -- > 點選 Add


  • Type: 選取剛剛建立的 Media Type

  • Send to: 輸入收件人 email

  • When active: 這邊我保留預設值, 都收


點選 Update 讓 Media 設定生效


這樣就設定完成, 接下來嘗試產生 Trigger 來觀察收到的信件內容


發生問題時



狀況恢復時



這樣 Zabbix 發生狀況或是狀況解除就可以有通知以及紀錄了


~ enjoy it



Reference