星期日, 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


星期日, 5月 29, 2022

Zabbix Proxy with container 與透過 zabbix proxy 自動註冊 小記

Zabbix Proxy with container  與透過 zabbix proxy 自動註冊 小記


Zabbix: zabbix-proxy-sqlite3 with container

OS: openSUSE Leap 15.3 in Azure



今天來寫 Zabbix Proxy with container 安裝以及 zabbix agent 如何透過 zabbix proxy 來進行自動註冊


先來說明為何需要 Zabbix Proxy 來提供服務, 目前規劃的想法如下

  • Zabbix Client 沒有對外公共 IP, 無法傳送資料給 Server,  所以在內網將相關資訊匯報給 Zabbix Proxy, 再由 Zabbix Proxy 傳送資訊

  • Zabbix Proxy 如果在網路不穩定的狀況下, Client 的相關資料是存放在 DB 內, 等到網路恢復穩定的時候, 可以將相關資料傳回 Zabbix Server

  • 目前並不是所有的 Template 都有 Active, 可以透過 Zabbix Proxy 對內網的 Zabbix passive client 收集資料後送出


這次的測試 Zabbix Proxy 我是建立在 Azure

在 Azure 建立 openSUSE Leap 15.3 VM

登入 openSUSE Leap 15.3

我們 Zabbix Proxy 的安裝是使用 container 的方式


啟動 docker 服務, 設定開機啟動

# systemctl  start  docker

# systemctl  enable  docker


啟動 zabbix proxy

# docker  run  --name  zabbix-proxy-sqlite3  \

           -e  ZBX_HOSTNAME="Azure-sakana-proxy" \

           -e  ZBX_SERVER_HOST="YOUR_ZABBIX_SERVER_IP" \

           -e  ZBX_TIMEOUT="30" \

           -e  ZBX_CONFIGFREQUENCY="60" \

           -e  ZBX_DATASENDERFREQUENCY=3 \

           -p  10051:10051 \

           -d  zabbix/zabbix-proxy-sqlite3:alpine-6.0-latest


  • ZBX_SERVER_HOST 請換成自己的 Zabbix Server IP or FQDN


然後我有新增自動註冊機制以及安裝 zabbix agent



新增 Proxy in Zabbix


登入 Zabbix 管理介面

點選 Administration -- > Proxies



點選右上角 Create proxy


輸入名稱


  • 名稱要跟上面的 HOSTNAME 符合


點選 Add  加入 Proxy

可以到 Administration -- > Proxies

看看新增加的 Last seen (age) 有沒有秒數





接下來處理 Client 透過 Proxy 加入的自動註冊


點選 Configuration -- > Actions -- > Autoregistration actions 

點選右上角的 Create action 



輸入 名稱



點選 Add 


Type: 選取 Proxy

Operator: Contains

Proxy: 輸入或是選取剛剛建的 Proxy 

點選 Add



  • 這邊就是設定自動註冊的條件, 就是 Zabbix Agent 來進行註冊的時候, 如果他來自你選定的 Proxy, 就符合自動註冊的條件


接下來設定自動註冊要套用的行為

點選 Operations



點選 Add 完設定


最後我們要來驗證, Zabbix agent 透過 Zabbix Proxy 來進行資訊的回報


一樣在 Azure  上面建立 openSUSE Leap 15.3 VM

登入 openSUSE Leap 15.3


安裝 zabbix agent2 

# rpm  -Uvh  --nosignature  https://repo.zabbix.com/zabbix/6.0/sles/15/x86_64/zabbix-release-6.0-1.sles15.noarch.rpm


# zypper  --gpg-auto-import-keys  refresh  'Zabbix Official Repository'


# zypper  install  zabbix-agent2


修改相關設定


觀察設定檔

# egrep -v  '^#|^$'  /etc/zabbix/zabbix_agent2.conf 


PidFile=/var/run/zabbix/zabbix_agent2.pid

LogFile=/var/log/zabbix/zabbix_agent2.log

LogFileSize=0

Server=172.16.0.5

ServerActive=172.16.0.5

#Hostname=zabbix server

HostnameItem=system.hostname

Include=/etc/zabbix/zabbix_agent2.d/*.conf

ControlSocket=/tmp/agent.sock

Include=./zabbix_agent2.d/plugins.d/*.conf


  • 透過 Zabbix Proxy 來進行資訊回報, 最大的差別只有 Server 與 ServerActive 是指向 Zabbix Proxy 的 IP, 而非 Zabbix Server 的 IP


啟動 zabbix agent 2 的服務, 並設定開機啟動

# systemctl  start  zabbix-agent2

# systemctl  status  zabbix-agent2

# systemctl  enable  zabbix-agent2


另外同場加映, 因為有測試  Docker by Zabbix agent 2 這個 template, 額外進行下列動作

# systemctl  start  docker

# systemctl  enable  docker

# usermod  -aG  docker  zabbix



測試是否可以監控 docker

# docker  run  -d  --name=grafana  -p  3000:3000  grafana/grafana-enterprise


實驗結果成功



又往 Zabbix 前進一步


~ enjoy it


References: