初投稿です。
仕事で使っている監視・ジョブツールであるHinemosのインストールと、やっておいた方が良い(と、思う)最低限の初期設定をまとめます。
他の方の参考になれば嬉しいです。
前提知識
このページでは、以下の内容をある程度理解されていることを前提に~~(説明すると長くなって面倒なので)~~記載をしています。
- Linuxの基本的な操作
- AWSの設定(セキュリティグループの設定とか)
viエディタの使い方
Hinemosとは?
Javaで動作するオープンソースの監視・ジョブツールです。基本機能は無料で利用できます。
Hinemos1つで監視とジョブを行うことができます(ただし、一部の監視とジョブを利用するには、対象マシンにHinemosエージェントをインストールする必要があります)。
詳細は製品サイトへ
作るもの
執筆時点で最新のver.6.2.1を利用します。
(2020/3/26追記 ver.6.2.2がリリースされていますが、バージョンの差異による設定方法の違いはなさそうです)
なお、本記事では下図を実現するためのHinemosマネージャ(下図の真ん中の青い四角)の設定を行います。
監視対象側の設定、監視の設定方法などは別の記事でまとめようと思います。
必要なもの
- Hinemosマネージャ用のRHEL系マシン1台(RHEL7系) ※RHEL7であればマイナーバージョンはなんでもOK
- Gmailアカウント(通知メールをリレーさせるため)
このページでは、下のような図の構成で示す通り、AWS上で動く管理対象マシンを監視するため、Hinemosマネージャを構築します。異常を検知した場合は、メールで異常の内容を通知するよう設定をしたいと思います。
メールはHinemosマネージャからGmailをリレーして送信されるように設定します。
Hinemosはマネージャと監視・ジョブの実行対象となるマシン、そしてクライアント(上の図では「ローカルマシン」と記載)の3つで構成されています。
なお、少し前で触れましたが、一部の監視とジョブを実行するには、対象のマシンにHinemosエージェントをインストールする必要があります。また、HinemosはJavaで動作するので、対象のマシンにJavaをインストールする必要があります(ここ地味に重要)。
が、(一部を除いて)監視を行うだけであれば、監視対象にHinemosエージェントは必要ありません。
今回はエージェントを必要としない監視だけ行うので、管理対象マシンにHinemosエージェントはインストールしません。
Hinemosクライアントについて
Hinemosマネージャに対して監視やジョブの設定などを行うためには、Hinemosクライアントが必要です。
Hinemosクライアントは、ローカルマシン(Windows)にインストールするタイプ(リッチクライアント)と、RHEL系マシンにインストールして、Webブラウザで接続して操作するタイプ(Webクライアント)の2種類があります。
サーバリソースに余裕があれば、HinemosマネージャとWebクライアントを同居させることができます。WebクライアントはHTML5対応のWebブラウザさえあればOSに関係なく操作できるので、こっちがオススメです。
今回は、HinemosクライアントとしてWebクライアントを利用します。
Hinemosに必要なパッケージ
Hinemosの動作環境については、こちらを見てください。ここでは、Hinemosの動作環境を満たした上で、最低限必要なものをまとめます。より詳しい情報は、Hinemosインストールマニュアル(リンクのja_Install_Linux_6.2_rev2.pdf)を見てください。
Hinemosマネージャ
- Java: OpenJDK 1.8
- vim-common
Hinemos Webクライアント
- Java: OpenJDK 1.8
- unzip
Hinemos環境の準備
Hinemosインストーラの入手
GitHubでインストーラを入手します。具体的には、下記の2つをダウンロードします。
- hinemos-6.2-manager-6.2.1-1.el7.x86_64.rpm
- hinemos-6.2-web-6.2.1-1.el7.x86_64.rpm
Hinemosマネージャ用インスタンスの作成
AWS上でHinemosマネージャ用のインスタンスを作成します。今回は以下の内容でインスタンスを作成します。
ちなみに後述しますが、t2.microインスタンスではHinemosマネージャ、Webクライアントの2つを同時に動かすにはリソース(メモリ)が足りません。
お金に余裕があればt2.small以上を用意してください。
- OS: CentOS7(x86_64)
- インスタンスタイプ: t2.micro
Hinemosマネージャとwebクライアントのインストール・・・のための準備
Hinemosマネージャをインストールするために必要な作業は、下記の通りです。
- SELinuxの無効化
- OpenJDKのインストール
- スワップ領域の拡張(t2.small以上のインスタンスの場合は不要)
1. SELinuxの無効化
HinemosはSELinuxが有効化されているとインストールできないので、SELinuxを無効化します。
エディタで/etc/selinux/configを下記の通り変更します。
今後、rootユーザでないと実行できないコマンドが多く出てくるので、rootユーザでbashを開き直して実施するのが楽だと思います。
# rootユーザでbashを開く
sudo bash
# SELinuxの設定ファイルを編集
vi /etc/selinux/config
# 変更前
SELINUX=enforced
# 変更後
SELINUX=disabled
変更後、再起動をして設定を反映させましょう。
reboot
2.OpenJDKのインストール
Hinemosに必要なパッケージでも述べましたが、Hinemosマネージャ、Hinemos WebクライアントはOpenJDK8以上が必要です。
下記コマンドでOpenJDK 1.8をインストールします。
sudo bash
# OpenJDK 1.8をインストール
yum -y install java-1.8.0-openjdk-devel
3. スワップ領域の拡張(t2.small以上のインスタンスの場合は不要)
Hinemosマネージャ用インスタンスの作成の部分で説明した通り、このページで作成するインスタンス(t2.micro)ではメモリが足りません。インストールマニュアルによると、HinemosマネージャとHinemos Webクライアントを1台のマシンで運用するには、最低でも1.5GB必要なので、t2.micro(メモリ:1GB)では500MB不足しています。なので、根本的な解決方法ではないですが、スワップ領域を広げて無理やり動かす、、という荒技で解決します。
次は、スワップ領域を2GB増やすための設定例です。
# スワップファイルを作成
dd if=/dev/zero of=/var/swpfile bs=1M count=2048
mkswap /var/swpfile
# スワップ領域として使用する
swapon /var/swpfile
最後にfreeコマンドでスワップ領域が増えているか確認してみましょう。
[centos@hinemos-manager ~]$ free
total used free shared buff/cache available
Mem: 1013192 674312 65804 44920 273076 136804
Swap: 2097148 256 2096892
Hinemosマネージャ、Hinemos Webクライアントのインストール
インストールのための準備ができたので、早速インストールをしましょう。
scpコマンドやWinSCPを利用してインストーラをインスタンスに転送し、インストールを実行します。
# scpでrpmファイルをCentOSサーバに転送するコマンド例
scp -i <秘密鍵のパス> hinemos-6.2-manager-6.2.1-1.el7.x86_64.rpm centos@<IPアドレス>:/home/centos/
scp -i <秘密鍵のパス> hinemos-6.2-web-6.2.1-1.el7.x86_64.rpm centos@<IPアドレス>:/home/centos/
AWS上で利用するCentOSの場合、sshのログインユーザは「centos」になります。sshコマンドでログインする場合は下記のようなコマンドになります。
ssh -i <秘密鍵のパス> -l centos <IPアドレス>
インストーラを転送した先のファイルパスに移動し、下記のコマンドを実行します。
# Hinemosマネージャのインストール
rpm -ivh hinemos-6.2.1-manager-6.2.1-1.el7.x86_64.rpm
# Hinemos Webクライアントのインストール
rpm -ivh hinemos-6.2-web-6.2.1-1.el7.x86_64.rpm
インストールがうまくいくと、/opt配下にhinemosディレクトリ(Hinemosマネージャのインストールディレクトリ)と、hinemos_webディレクトリ(Hinemos Webクライアントのインストールディレクトリ)の2つが作成されます。
インストールマニュアルを見ると、上記のrpmコマンドを実行する際にオプションをつけることでインストールディレクトリを変更することができるようです。詳しくはインストールマニュアルを参照してください。
前置きが長くなりましたが、以上がHinemosマネージャとWebクライアントのインストール方法についてでした。次からは、Hinemosマネージャ、Hinemos Webクライアントを利用するにあたって、必要な設定をしていきます。
AWS上でHinemosを利用する前の設定
インストールが終わったので、これからHinemosを利用する前にしておくべき設定をします。
具体的には、下記の設定をします。
- Hinemosマネージャ内部DB(PostgreSQL)のパスワード変更
- Hinemos Webクライアントの設定
- AWSのセキュリティグループ設定
Hinemosマネージャ内部DBのパスワード変更
Hinemosマネージャは、監視対象などの設定や監視結果のデータを記録するため、PostgreSQLが同梱されています。このPostgreSQLには、インストール直後だとユーザ名もパスワードも「hinemos」でログインできてしまいます。
このままにしていると万が一の時、セキュリティ的に問題があると思うので、最低限パスワードは変更をした方が良いでしょう。
PostgreSQLのパスワードを変更するには、次のステップを行います。
- PostgreSQLに直接ログインしてパスワードを直接変更する
- Hinemosマネージャの設定ファイルを変更する
PostgreSQLのパスワードを変更する
PostgreSQLを起動/ログインし、ALTER USER文を実行してログインパスワードを変更します。
# Hinemosに同梱されているPostgreSQLを起動する
systemctl start hinemos_pg
# PostgreSQLにログインする
/opt/hinemos/postgresql/bin/psql -U hinemos -p 24001
-- パスワードを変更
ALTER USER hinemos PASSWORD '(新しいパスワード)';
以上でPostgreSQLのパスワード変更ができたので、ログアウトします
# PostgreSQLからログアウト
\q
以上が完了したら、PostgreSQL側の作業は終了なので、PostgreSQLを一旦停止させましょう。
systemctl stop hinemos_pg
Hinemosマネージャの設定ファイルを変更する
PostgreSQL側のパスワードの変更をしたので、今度はHinemos側のパスワードを変更します。
vi /opt/hinemos/etc/META-INF/persistence.xml
persistence.xmlの次の行をPostgreSQLのパスワードを変更するで設定したのとパスワードに変更しましょう。
#変更前
<property name="javax.persistence.jdbc.password" value="hinemos"/>
#変更後
<property name="javax.persistence.jdbc.password" value="(新しいパスワード)"/>
同様に、次のファイルに対しても、PostgreSQLのパスワードを変更するで設定したのと同じパスワードを指定します。
vi /opt/hinemos/etc/db_account.properties
#変更前
hinemos_pass=hinemos
#変更後
hinemos_pass=(新しいパスワード)
これで、Hinemosの内部DBに対する設定は完了です。
Hinemos Webクライアントの設定
Hinemos Webクライアントの設定をしていきます。このページでは、大きく下記の2点を実施します。
- アクセス制御設定
- HTTPS化設定
Hinemos Webクライアントのアクセス制御
Hinemos Webクライアント側の設定として、アクセス制御の設定をしようと思います。
AWSのセキュリティグループでIPアドレスフィルタを設定するでも良いのですが、そうすると外出先で急遽サーバの状態を確認したい、などの場合に対応できない状況が想定されます。
かといって、セキュリティグループを設定せずに、どこからでもアクセスできる状態にしてしまうと、最悪Hinemosマネージャに不正アクセスされてしまうリスクがあります。ジレンマですね。
そんなジレンマ解決方法の1例として、Hinemos Webクライアントで設定可能なBASIC認証によるアクセス制御を実施します。これをすることで、下のようなダイアログが表示されるようになり、認証をクリアしないとアクセスすることができなくなります。
これで、少なくとも不特定多数の人間がHinemosマネージャにアクセスできないように制限することができますね。
では、アクセス制御設定をするためにHinemosマネージャの下のファイルを編集します。
vi /opt/hinemos_web/conf/basic-auth-users.xml
下記のコメントアウト()を外して、usernameとpasswordの値を変更します。
<!-- 変更前 -->
<!--
<role rolename="hinemos"/>
<user username="user" password="<must-be-changed>" roles="hinemos"/>
-->
<!-- 変更後 -->
<role rolename="hinemos"/>
<user username="<任意のユーザ名>" password="<任意のパスワード>" roles="hinemos"/>
BASIC認証を利用するよう、web.xmlの設定内容を変更します。
具体的には、下記の該当部分のコメントアウトを外します。
<!-- 変更前 -->
<!-- BASIC Auth -->
<!--
<security-constraint>
<web-resource-collection>
<web-resource-name>
Authentication of BasicAuth
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>hinemos</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Hinemos WebClient</realm-name>
</login-config>
-->
<!-- 変更後 -->
<!-- BASIC Auth -->
<security-constraint>
<web-resource-collection>
<web-resource-name>
Authentication of BasicAuth
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>hinemos</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Hinemos WebClient</realm-name>
</login-config>
Hinemos WebクライアントのHTTPS化
ローカルマシンからHinemos Webクライアントへの接続はデフォルトではHTTP通信となっています。このままでは盗聴の恐れがあり、セキュリティ的に問題があるので、HTTPS通信になるよう設定します。
なお、Hinemos Webクライアントとマネージャの間もデフォルトではHTTP通信となっていますが、今回構築する環境の場合は、Hinemos WebクライアントとHinemosマネージャは同じマシンなので、Hinemosマネージャ・Hinemos Webクライアント間のHTTPS通信化はしないものとします。興味がある方はマニュアルを参照してください。
ローカルマシンとWebクライアント間でHTTPS通信をするには、下記の作業を行います。
- オレオレ証明書の発行
- server.xmlの設定変更
オレオレ証明書の発行
まずはオレオレ証明書を発行し、/opt/hineos_web/.keystoreに配置します。
keytool -genkey -alias tomcat -keyalg RSA -keystore /opt/hinemos_web/.keystore
キーストアのパスワードを入力してください:(1でコメントを外したパラメータ「keystorePass」に設定した値を入力) 新規パスワードを再入力してください:
姓名を入力してください。
[Unknown]: (何も入力せずENTER) 織単位名を入力してください。
[Unknown]: (何も入力せずENTER) 組織名を入力してください。
[Unknown]: (何も入力せずENTER) 都市名または地域名を入力してください。
[Unknown]: (何も入力せずENTER) 州名または地方名を入力してください。 [Unknown]: (何も入力せずENTER)
この単位に該当する 2 文字の国番号を入力してください。 [Unknown]: (何も入力せずENTER)
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown でよろしいですか? [いいえ]: (はいを入力)
<tomcat> の鍵パスワードを入力してください。
(オレオレ証明書用のパスワードを入力してください)
server.xmlの設定変更
そして、/opt/hinemos_web/conf/server.xmlを編集し、先ほど発行したオレオレ証明書を利用してHTTPS通信ができるよう設定を変更します。
vi /opt/hinemos_web/conf/server.xml
<!-- 変更前 -->
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
maxThreads="32"
/>
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<!--
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="32" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/opt/hinemos_web/.keystore" keystorePass="changeit"
/>
-->
<!-- 変更後 -->
<!--
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
maxThreads="32"
/>
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="32" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/opt/hinemos_web/.keystore" keystorePass="<オレオレ証明書のパスワード>"
/>
AWSのセキュリティグループ設定
Hinemosマネージャは管理対象と色々な通信をするので、必要に応じてセキュリティグループを変更しておく必要があります。
下記の表では、HinemosマネージャとHinemos WebクライアントをAWS上に構成するにあたって、最低限必要なインバウンドの設定を記載します。ソース部分は状況によって全然違うと思うので記載を省略します。
ポート番号 | TCP or UDP | 用途 | 備考 |
---|---|---|---|
443 | TCP | Webクライアントへの接続のため(HTTPS通信の場合) | |
80 | TCP | Webクライアントへの接続のため(HTTP通信の場合) | |
161 | UDP | リソース監視、プロセス監視、SNMP監視のため | |
162 | UDP | SNMPTRAP監視のため | |
8080 | TCP | HinemosクライアントとHinemosマネージャ通信のため | |
8081 | TCP | HinemosエージェントとHinemosマネージャ通信のため | |
514 | TCP or UDP | システムログ監視のため | システムログ監視でTCP、UDPどちらを利用するか決めて設定する必要がある |
今回の場合は、443、161、8080のインバウンド許可だけ追加します。
以上で、Hinemosを利用する前の設定は完了です。
早速、HinemosマネージャとHinemos Webクライアントを起動してみましょう。
# Hinemosマネージャを起動
systemctl start hinemos_manager
# Hinemos Webクライアントを起動
systemctl start hinemos_web
# Hinemosマネージャ、Hinemos Webクライアントの起動状態確認
systemctl status hinemos_manager
systemctl status hinemos_web
# Active: active (running) となっていればOK
では、ブラウザでhttps://Hinemos WebクライアントのIPアドレス
にアクセスしてみましょう。
BASIC認証で設定したユーザ名、パスワードを入力してHinemos Webクライアントにアクセスします。
ログインダイアログが表示されるので、初期パスワード(ユーザ名:hinemos、パスワード:hinemos)でログインしましょう。
※ここでのパスワードは、Hinemosマネージャ内部DBのパスワード変更で設定したパスワードとは違います。
Hinemosの設定
では次に、Hinemosにログインして以下の設定をしていきましょう。
- ログインユーザのパスワード変更
- SMTPサーバの設定
ログインユーザのパスワード変更
インストール時に用意されているログインユーザとパスワードは両方とも「hinemos」になっています。この「hinemos」ユーザは管理者権限を持っているので、このまま万が一不正ログインされると色々とマズいので、パスワードを変更しましょう。
まずは左上のメニューから「パースペクティブ(P)→アカウント」の順番でアカウント画面を開きます。
右上にある「アカウント[ユーザ]」画面でhinemosユーザを選択して南京錠のアイコンをクリックします。
新しいパスワードの入力を求められるので、パスワードを2回入力してログインパスワードを変更します。
Gmailのリレー設定
Hinemosでメールでの通知を実現するために、Gmailのリレー設定を行います。
Gmailへのリレー設定をするためには、前提として2段階認証を設定する必要がありますので、まずは2段階認証設定を行ってください。
ここでは、HinemosからGmailへリレーするための設定方法を簡単に解説したいと思います。
1, Googleアカウントのページ に行く
2, 左のタブから「セキュリティ」を選択し、「Googleへのログイン」内の「アプリ パスワード」を選択
3, 「アプリを選択」からメール、「デバイスを選択」から任意の名前を入力し、生成をクリック
4, 表示されたパスワードをメモする
SMTPサーバの設定(Hinemos側の転送設定)
転送予定のGmail側の設定が終わったので、次にHinemos側の転送設定を行います。
まず左上のメニューから「パースペクティブ(P)→メンテナンス」の順番でメンテナンス画面を開きます。
「メンテナンス[Hinemosプロパティ]画面」から、次の行を見つけて編集します。
キー | 概要 | 設定値 |
---|---|---|
mail.smtp.auth | SMTPサーバとの通信時に認証が必要か | true |
mail.smtp.host | SMTPサーバのホスト | smtp.gmail.com |
mail.smtp.port | SMTPサーバのポート番号 | 587 |
mail.smtp.starttls.enable | SMTPとの通信時にTLSを利用するか | true |
mail.transport.password | SMTPサーバの認証パスワード | Gmailのリレー設定で取得したパスワード |
mail.transport.user | SMTPサーバの認証ユーザ | Gmailのリレー設定でパスワード取得に使用したアカウント(メールアドレス) |
これで、HinemosからGmailをリレーしてメールを通知する設定ができました。
・・・ここまで書いていたら長くなってしまったので、監視結果をメールで送信する方法は別の記事でまとめようと思います。
まとめ
本記事では、AWS上でHinemosをインストールし、下記の必要最低限の設定を行いました。
- Hinemosの内部DB(PostgreSQL)のパスワード変更
- Basic認証を利用したWebクライアントへのアクセス制限
- Webクライアントとの通信のHTTPS化
- 管理者アカウントのパスワード変更
- メール通知をするためのGmailへのリレー設定
次の記事では、本記事でまとめた環境をもとに監視を行い、監視結果をメールで任意アドレスに通知する方法をまとめたいと思います。
(2020/10/19追記)
初期設定変からだいぶたっちゃいましたが続編を寄稿しました。
よければどうぞ
Hinemos ver.6.2 をAWS上にインストールして監視するまで(監視設定編)