2020年6月6日土曜日

Docker入門 (CentOS 7にDocker CEインストール&CentOSコンテナを作成してSquidを動かす)

Docker自体には興味があったのだが、なかなか時間が取れず、検証することを避けてきていたのだが、そろそろ基本的なところだけでも押さえておきたいと思い始めた。

今回、CentOS 7の環境にDockerのコンテナ環境を構築し、Docker上にCentOSコンテナを立ち上げてSquidのプロキシサーバを構築してみるという検証を実施した。

環境

  • OS : CentOS 7.8
  • Docker : 19.03.10
  • コンテナ上のCnetOS : 7.6 (あえてホストとは別バージョンにしてみた)

Dockerインストール手順

Dcoker CEのインストール

現在Dockerは、有償版のDcoker EE (Enterprise Edition)と無償版のDcoker CE (Community Edition)の2つに分かれており、通常使うものは当然、Docker CEとなる。

CentOSインストール後にyum install dockerを実行することでもインストールされるが、この手順ではDockerのバージョンが1.13.1という古いバージョンがインストールされてしまう。したがって、本家サイトの手順に従いインストールを行うことが推奨される。
※なお、バージョン1.13.1は、Dcoker EE/CE分割前の最終バージョンとなる。

yum-config-managerを使ってDockerのレポジトリ登録するため、yum-utilsをインストールする。

# yum install yum-utils -y

yum-config-managerを使ってDockerのレポジトリ登録する。

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Docker CEをインストールする。

# yum install docker-ce docker-ce-cli containerd.io -y

Dockerを起動させてみる。

# systemctl start docker
# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2020-05-31 16:16:14 JST; 3s ago
     Docs: https://docs.docker.com
 Main PID: 1698 (dockerd)
    Tasks: 8
   Memory: 37.8M
   CGroup: /system.slice/docker.service
           mq1698 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/cont...

~(以下略)~

# systemctl enable docker

docker -vコマンドでバージョンを確認すると、Docker version 19.03.10がインストールされていることが確認できる。

# docker -v
Docker version 19.03.10, build 9424aeaee9

docker versionコマンドを使うと、さらに詳細な情報を確認することができる。

# docker version
Client: Docker Engine - Community
 Version:           19.03.10
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        9424aeaee9
 Built:             Thu May 28 22:18:06 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.10
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       9424aeaee9
  Built:            Thu May 28 22:16:43 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

プロキシ環境がある場合の設定

Dockerは「Docker Hub」と呼ばれる、Dockerのイメージが保存されているサイトからインターネット経由でイメージのダウンロードを行いコンテナを作成する。

直接インターネットと通信できる環境であれば問題ないが、プロキシ環境がある場合は、Dockerのサービス起動ファイル「/usr/lib/systemd/system/docker.service」の[Service]句に、以下のようにプロキシ用の環境変数を設定を追加する。

[Service] ←★Service句の配下に追記
Environment="http_proxy=http://192.168.33.23:8080" "https_proxy=http://192.168.33.23:8080"

設定反映のため、Dockerを再起動する。

# systemctl daemon-reload
# systemctl restart docker

docker infoコマンドで環境変数が反映されていることを確認する。

# docker info

~(中略)~

 HTTP Proxy: http://192.168.33.23:8080
 HTTPS Proxy: http://192.168.33.23:8080

~(以下略)~

「hello-world」コンテナを作成・起動

Dockerの動作確認のためのテスト用コンテナである「hello-world」コンテナを作成・起動してみる。docker runコマンドにてコンテナを作成・起動できる。

# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

docker psコマンドでコンテナの確認ができる。停止状態のコンテナ含め表示させるには、-aオプションを付けて実行する。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
bf385414bac4        hello-world         "/hello"            19 seconds ago      Exited (0) 18 seconds ago                       magical_roentgen

docker imagesコマンドで保持しているイメージを確認できる。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

コンテナやイメージの削除は本題から逸れるので、また別の機会に記載することにし、先に進むことにする。

CentOS 7のイメージ取得とコンテナ作成・起動

コンテナのイメージ取得

Docker Hubのイメージを検索するにはdocker searchコマンドを使う。「centos」で検索すると複数出てくるが、今回は1つ目に表示される「centos」イメージを使ってコンテナを作成する。

# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6020                [OK]
ansible/centos7-ansible            Ansible on Centos7                              129                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session …   115                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos -  …   114                                     [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   76
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]
tutum/centos                       Simple CentOS docker image with SSH access      46
centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational  …   44
kinogmt/centos-ssh                 CentOS with SSH                                 29                                      [OK]
pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names …   12
guyton/centos6                     From official centos6 container with full up …   10                                      [OK]
centos/tools                       Docker image that has systems administration …   6                                       [OK]
drecom/centos-ruby                 centos ruby                                     6                                       [OK]
pivotaldata/centos                 Base centos, freshened up a little with a Do …   4
darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
mamohr/centos-java                 Oracle Java 8 Docker image based on Centos 7    3                                       [OK]
pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t …   3
pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi …   3
miko2u/centos6                     CentOS6 日本語環境                                   2                                       [OK]
indigo/centos-maven                Vanilla CentOS 7 with Oracle Java Developmen …   1                                       [OK]
blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
mcnaughton/centos-base             centos base image                               1                                       [OK]
pivotaldata/centos7-dev            CentosOS 7 image for GPDB development           0
pivotaldata/centos6.8-dev          CentosOS 6.8 image for GPDB development         0
smartentry/centos                  centos with smartentry                          0

なお、イメージにはバージョンがあり、「centos」の場合は、7.1、7.2、…7.7といった複数バージョンを選択できる。バージョンの確認は残念ながらdockerコマンドでは実装されていないようなので、ブラウザなので直接確認する。

今回は、あえてバージョン指定をして、「centos:7.6.1810」にてコンテナ作成をすることにする。docker pullコマンドで、Docker Hubからイメージを取得する。

# docker pull centos:7.6.1810

イメージを確認するには、docker imagesコマンドを使用する。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7.6.1810            f1cb7c7d58b7        14 months ago       202MB

なお、取得したイメージの総容量を表示したい場合は、docker system dfコマンドを使用する。

# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              1                   0                   201.8MB             201.8MB (100%)
Containers          0                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

コンテナ作成・起動

それではコンテナを作成しよう。docker runコマンドにてイメージからコンテナを作成し起動することができる。最後に付与している/sbin/initsystemctlを使うための指定となる。

# docker run -d --privileged -p 8080:3128 --name "docker-squid" centos:7.6.1810 /sbin/init
4cb7fd3a1bc43aecea24ea23c5f8b318c3a9be45a08698eaa7a254cef7800af6

オプションの説明は以下の通り。

オプション 説明
-d コンテナをデタッチド・モード(バックグラウンド)で起動。
–privileged コンテナを特権モードで起動する。systemctlコマンドを使用するために指定が必要。
-p コンテナのポートとホスト側のポートを紐づける。:で指定。今回は、コンテナのSquidデフォルトポートである3128をホストの8080番ポートに紐づける。
–name コンテナの名前を指定。

docker psコマンドでコンテナが作成されていることを確認しておく。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
4cb7fd3a1bc4        centos:7.6.1810     "/sbin/init"        5 seconds ago       Up 4 seconds        0.0.0.0:8080->3128/tcp   docker-squid

それではコンテナのCentOSにログインしてみよう。「docker-squid」コンテナに対して、bashでログインするには、docker execコマンドを用いて以下のように記載する。

# docker exec -it docker-squid bash
[root@4cb7fd3a1bc4 /]# ←★プロンプトが変化する

コンテナにSquidをインストール

コンテナにログインしたら、yumをつかってsquidをインストールする。特に通常のCentOSと違いはなく、問題なくインストールが完了した。

[root@4cb7fd3a1bc4 /]# yum install squid -y
[root@4cb7fd3a1bc4 /]# squid -v
Squid Cache: Version 3.5.20

squidは最低限の通信が確認できるよう、「/etc/squid/squid.conf」に対して以下を追記した。通信を許可するネットワークと上位プロキシを設定している。

acl localnet src 192.168.33.0/24
acl localnet src 192.168.11.0/24
cache_peer 192.168.33.23 parent 8080 7 no-query no-netdb-exchange
never_direct allow all

squidを起動する。

[root@4cb7fd3a1bc4 /]# systemctl start squid
[root@4cb7fd3a1bc4 /]# systemctl enable squid

動作確認

まずは、コンテナ内でsquidの動作を確認してみる。環境変数でローカルアドレスの3128番ポートに対して、curlコマンドを使って通信確認をすると、「HTTP/1.1 200 OK」が出力されており問題なく通信できていることが確認できた。

[root@4cb7fd3a1bc4 /]# export http_proxy=http://127.0.0.1:3128
[root@4cb7fd3a1bc4 /]# export https_proxy=http://127.0.0.1:3128
[root@4cb7fd3a1bc4 /]# curl -v http://www.google.co.jp
* About to connect() to proxy 127.0.0.1 port 3128 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 3128 (#0)
> GET http://www.google.co.jp/ HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.google.co.jp
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 OK

~(以下略)~

次に、コンテナからexitコマンドでログオフしたのち、コンテナの3128番ポートと紐づいている8080番ポートを指定して再度確認すると、「HTTP/1.1 200 OK」が出力され、問題なくホストOSからコンテナのsquidに対して通信できていることが確認できた。

# export http_proxy=http://127.0.0.1:8080
# export https_proxy=http://127.0.0.1:8080
# curl -v http://www.google.co.jp
* About to connect() to proxy 127.0.0.1 port 8080 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET http://www.google.co.jp/ HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.google.co.jp
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 OK

~(以下略)~

まとめ

以上でDockerの基本的な使い方を理解することができた。最後に、今回使用したDockerのコマンドをまとめておくことにする。

コマンド 内容
docker version Dockerのバージョン表示。docker -vより詳細な出力。
docker info Dockerで設定されている各種設定値(環境変数など)の情報出力。
docker run コンテナを作成・起動。
docker ps 起動中のコンテナを一覧表示。
docker ps -a 停止中のコンテナを含め、コンテナを一覧表示。
docker images イメージを一覧表示。
docker search Docker Hubのイメージを検索。
docker pull Docker Hubからイメージを取得。
docker exec 起動中のコンテナにてコマンドを実行。

参考

2020年6月3日水曜日

【PowerCLI】仮想マシンに直接コマンドを実行する「Invoke-VMScript」

PowerCLIでは、直接仮想マシンにコマンドを実行する機能がある。この機能を使うと、仮想マシンのOSにログインすることなく、設定変更や情報取得を行うことができる

このコマンドは非常に有用なので、コマンドの使い方を調べて、実際に試してみた。

環境及び前提条件

環境

  • vSphere 6.7 Update 3

前提条件

  • vCenter ServerでESXi管理されていること (要するに無償版のESXiライセンスの環境ではないこと)
  • 仮想マシンにVMware Toolsがインストールされていること

仮想マシンでコマンドを実行するInvoke-VMScript

仮想マシンに対してコマンドを実行するコマンドレットとして、Invoke-VMScriptが用意されている。構文は以下の通り。

Invoke-VMScript [-ScriptText] <String> [-VM] <VirtualMachine[]> [-HostCredential <PSCredential>] [-HostUser <String>] [-HostPassword <SecureString>] [-GuestCredential <PSCredential>] [-GuestUser <String>] [-GuestPassword <SecureString>] [-ToolsWaitSecs <Int32>] [-ScriptType <ScriptType>] [-Server <VIServer[]>] [-WhatIf] [-Confirm] [<CommonParameters>]

必要となるパラメータの説明を以下に記載する。

パラメータ 内容
VM 仮想マシン名を指定する。
GuestUser 仮想マシンのユーザを指定する。
GuestPassword 仮想マシンのパスワードを指定する。
ScriptText スクリプトのコマンドを記載する。コマンドが長くなる場合は、一度コマンドを変数に代入してから実行させるのがおすすめ。複数コマンドを実行したい場合は「;」でコマンドを複数区切って実行させることができる。
(Optional) ScriptType 実行するスクリプトのタイプを選べる。PowerShell、Bat、Bashのいずれかを選べる。WindowsのデフォルトはPowerShellで、LinuxはBashとなる。したがって、仮想マシンがWindowsで、かつコマンドプロンプト上でコマンドを実行したい場合のみ本パラメータでBatを指定すればよく、通常は設定しなくてよい。

実際にいくつか簡単なコマンドを実行してみよう。

PowerShellコマンドを実行

以下は、Windows Server 2016の仮想マシンでhostnamewhoamiGet-WinSystemLocaleを実行する例となる。きちんとコマンドの実行結果が日本語で返ってきていることがわかる。

PS C:\> $str = "hostname ; whoami ; Get-WinSystemLocale"
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd!" -ScriptText $str

ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
|  WIN-4DDOLQRR420
|  win-4ddolqrr420\administrator
|
|  LCID             Name             DisplayName
|  ----             ----             -----------
|  1041             ja-JP            日本語 (日本)
|
|
|
---------------------------------------------------------------------------------------------------------------------------------------------

コマンドプロンプト (Bat) のコマンドを実行

まずはverコマンドをScriptTypeオプションなしで実行してみよう。verコマンドはPowerShellで実行できないのでエラーになる。

PS C:\> $str = "ver"
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd!" -ScriptText $str

ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
|  ver : 用語 'ver' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
|  名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください
|  。
|  発生場所 行:1 文字:4
|  + & {ver}
|  +    ~~~
|      + CategoryInfo          : ObjectNotFound: (ver:String) [], CommandNotFoundException
|      + FullyQualifiedErrorId : CommandNotFoundException
|
|
---------------------------------------------------------------------------------------------------------------------------------------------

このような場合は、-ScriptType Batを付けて実行すれば成功する。

PS C:\> $str = "ver"
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd!" -ScriptType Bat -ScriptText $str

ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
|
|  Microsoft Windows [Version 10.0.14393]
|
---------------------------------------------------------------------------------------------------------------------------------------------
2020年5月31日日曜日

【製品比較】TP-LINK TL-SG108EとNETGEAR GS308Eを比較してみた!

最近では、3,000円台でVLAN設定ができるスイッチが販売されており、自宅では以前から「TP-LINK TL-SG108E」を使用している。

このスイッチとすごい見た目と機能が似ているスイッチとして「NETGEAR GS308E」があり気になっていた。

ちょうどスイッチがもう1つ必要だったので、買い足して比較してみた。

比較結果

以下に比較結果を記載する。NETGEAR GS308Eでは対応していない項目がいくつかあることから、「TP-LINK TL-SG108E」がおすすめとなる。

設定項目 TP-LINK TL-SG108E NETGEAR GS308E
価格 3,490円 (2016年購入時) 3,660円 (2020年購入時)
大きさ 158 x 101 x 25 mm 158 x 101 x 29 mm
重量 0.5kg 0.5kg
MACアドレステーブル 4K 4K
Buffer Size 192KB 192KB
Jumbo Frame 15K 9K
ユーザID変更 ×
バックアップ・リストア
工場出荷状態にリセット ● 管理画面・本体両方で可能
インタフェース管理 ● ポート単位でDisableが可能 × Disable不可
Port Statistics ● 受信/送信でエラーパケット確認が可能 ▲ 受信/送信の区別不可
LAG × 設定項目なし
IGMP Snooping
Loop検知
ポートミラーリング ● Ingress(受信)/Egress(送信)の選択が可能 ▲ 選択不可
ケーブルテスター
MTU VLAN × 設定項目なし
Port Based VLAN
802.1Q VLAN
帯域制御 ● 数値で指定 ▲ 512Kbps~512Mbpsの範囲のみ選択して設定可能
Storm Control ● UL-Frame/Multicast/Broadcastの指定が可能 ▲ Broadcastのみ

管理画面の比較

VLAN設定の管理画面で比較をしてみる。

VLAN設定は1画面で設定・確認できるようになっており、どのVLAN IDがどのポートにTagged/Untaggedで設定されているかわかるように表示される。

NETGEAR GS308E

VLAN設定は、まず「Basic」と「Advanced」に分かれている。

両方設定するのか、片方設定するのかさっそく分かりづらいが、これは「片方」しか設定できず、DisableをEnableにしようとすると、現在の設定が消去される旨の警告が表示される。

また、Tagged/Untaggedの設定は、VLAN IDを選択したうえで図示されたポートをクリックすることで設定することができる。

ただし、この設定を確認しようとすると、再度VLAN IDを選択して画面を表示させる必要がある。一覧表示する画面もあるのだが、残念ながらVLANに所属することしか確認できず、Tagged/Untaggedは表現されていない。

まとめ

すでに記載しているが、設定の豊富さ、管理画面の使いやすさ両方を考慮すると、「TP-LINK TL-SG108E」の選択が間違いないだろう。

2020年5月27日水曜日

【PowerCLI】ESXiのデータストアのアンマウントとパスの分離をコマンドで一気に実施する

vSphere環境でESXiからデータストアを取り外す際は、単純にアンマウントするだけではなく、「パスの分離」と呼ばれるSCSIデバイスの切断作業が必要となる。アンマウントはvSphere Clientを使えば全ESXiサーバで一気に実行することができるのでまだ負担が少ないが、パスの分離は、各ESXiサーバで実施する必要があり、作業負荷がかなり大きい作業となる。

そこで、以前からPowerCLIを使用することで一気にこの作業を実施できればよいと考えていたのだが、なかなか簡単にはできなさそうなので検証ができていなかったのだが、ようやくコマンドの調査と検証が終わったので、本記事にてPowerCLIを用いたアンマウントとパスの分離手順を記載する。

なお、手順検証はvSphere 6.7の環境で実施したが、データストア取り外し時にアンマウントとパスの分離を実施する手順自体は、vSphere 5.0の時代から続く作法となり、vSphere 6.7以前の環境でも利用できる可能性は高い。

環境

  • vCenter Server 6.7 Update 3b
  • ESXi 6.7 Update 3
  • PowerCLI 11.5

データストアのアンマウントとパスの分離手順

以下コマンドを上から順に実行すればよい。最初の変数は以下を指定する。
  • $dsLabel : アンマウント対象のデータストア名
  • $cluster : アンマウント対象のESXiが所属するクラスター名
# アンマウント対象のデータストアとクラスターを取得
$dsLabel = "MyDatastore"
$cluster = "MyCluster"

$ds = Get-Datastore $dsLabel
$vmfsUuid = (Get-View $ds).Info.Vmfs.Uuid
$lunUuid = (Get-View $ds).Info.Vmfs.Extent[0].DiskName

# 実行対象のESXi情報を取得
$vmhost = Get-Cluster $cluster | Get-VMHost

# アンマウント及びパスの分離を実行
$storSys = Get-View $vmhost.ExtensionData.ConfigManager.StorageSystem
$storSys.UnmountVmfsVolume($vmfsUuid)
$storSys.DetachScsiLun($lunUuid)
ストレージ側でLUNの削除または切断したのち、以下コマンドで「HBAデバイスのスキャン」と「VMFSボリュームのスキャン」を実施すれば、アンマウントしたデータストアは問題なくvSphere上から消えるはずだ。
Get-VMHost | Get-VMHostStorage -RescanAllHba -RescanVmfs

参考

2020年5月24日日曜日

Zabbix 5.0でGmailによるメール通知を行う手順

以前、以下記事でZabbix 3.0にてGmailによるメール通知の設定手順を記載した。

設定の流れは大きく変わっていなかったが、細かいところで手順に差異があったので、Zabbix 5.0におけるGmailによるメール障害通知を設定する手順を記載する。

設定概要

設定箇所が多いので、前回と同様、概要図を記載する。

  1. メディアタイプ:通知手段(メール、スクリプト、SMSなど)を設定。メールのメッセージ内容もメディアタイプで設定する
  2. ユーザのメディア:通知先メールアドレスと使用するメディアタイプを設定する。
  3. アクション:障害検知時の通知条件と通知するユーザを設定する。

Gmailによる障害通知設定方法

1. メディアタイプを作成

メディアタイプとは通知手段の設定となるが、Gmail送信用のメディアタイプは設定されていないので、新規に作成する。「管理」→「メディアタイプ」を選択し、「メディアタイプの作成」ボタンを押下し、以下の通り作成する。

  • 名前:Gmail
  • タイプ:メール
  • vSMTPサーバー:smtp.gmail.com
  • SMTPサーバーポート番号:465
  • SMTP helo:smtp.gmail.com
  • 送信元メールアドレス:<送信に用いるGmailアカウント>@gmail.com
  • 接続セキュリティ:SSL/TLS
  • 認証:ユーザー名とパスワード
  • ユーザー名:<送信に用いるGmailアカウント> ※「@gmail.com」は不要
  • パスワード:<送信に用いるGmailアカウントのパスワード>
  • メッセージフォーマット:HTML (プレーンテキストでも可。お好みで選択)
  • 有効:チェック

Zabbix 3.0と異なり、Zabbix 5.0ではメディアタイプで送信されるメールのメッセージ内容を設定する。「メッセージテンプレート」タブを選択し、「追加」を選択し、以下設定をする。今回はとりあえず、メッセージはデフォルトのままとした。

  • メッセージタイプ:障害
  • 件名:Problem: {EVENT.NAME}
  • メッセージ:<b>Problem started</b> at {EVENT.TIME} on {EVENT.DATE}<br><b>Problem name:</b> {EVENT.NAME}<br><b>Host:</b> {HOST.NAME}<br><b>Severity:</b> {EVENT.SEVERITY}<br><b>Operational data:</b> {EVENT.OPDATA}<br><b>Original problem ID:</b> {EVENT.ID}<br>{TRIGGER.URL}

2. ユーザのメディアを作成

作成したメディアタイプを使って、メディアを作成する。今回はAdminユーザーに対してメディアを作成することとした。

「管理→「ユーザー」→「Admin」→「メディア」タブに移動し、「追加」を選択して以下の通り設定する。

  • タイプ:Gmail
  • 送信先:<送信先のメールアドレス>
  • 有効な時間帯:1-7,00:00-24:00
  • 指定した深刻度のときに使用:すべてチェック
  • 有効:チェック

3. アクションを作成

最後にアクションを設定する。「設定」→「アクション」を選択し、「アクションの作成」ボタンを押下し作成する。

「アクション」タブでは以下の通り設定した。トリガーの深刻度の条件は、監視設計に応じて適切に設定すること。

  • 名前:Send Gmail
  • 計算のタイプ:And
  • 実行条件:
    • メンテナンス期間外 (「メンテナンス期間中」を「いいえ」で設定)
    • トリガーの深刻度 以上 _軽度の障害
  • 有効:チェック

「実行内容」タブでは、以下の通り設定する。実行条件が満たされた際に、AdminユーザーのGmail送信のメディアを使ってメール送信を行う設定となる。

  • 実行内容のタイプ:メッセージの送信
  • ユーザーに送信:Admin
  • 次のメディアのみ使用:Gmail

以上で設定は完了となる。

障害通知テスト

SNMP Trapにて障害を発生させると、ダッシュボードにて「アクション」が実行されたことが確認できる。オレンジで実行中、灰色で実行済み、赤で失敗を示す。

Gmail経由でメールが送信されることが確認できた。以下は、スマホのGmailアプリで確認したメール内容であり、HTMLメールなので各項目名が太字になっていることがわかる。


人気の投稿