Help us understand the problem. What is going on with this article?

Hinemos ver.6.2.1 をAWS上にインストールして監視するまで(初期設定編)

初投稿です。

仕事で使っている監視・ジョブツールであるHinemosのインストールと、やっておいた方が良い(と、思う)最低限の初期設定をまとめます。
他の方の参考になれば嬉しいです。

前提知識

このページでは、以下の内容をある程度理解されていることを前提に(説明すると長くなって面倒なので)記載をしています。

  • Linuxの基本的な操作
  • AWSの設定(セキュリティグループの設定とか)
  • viエディタの使い方

Hinemosとは?

Javaで動作するオープンソースの監視・ジョブツールです。基本機能は無料で利用できます。
Hinemos1つで監視とジョブを行うことができます(ただし、一部の監視とジョブを利用するには、対象マシンにHinemosエージェントをインストールする必要があります)。
詳細は製品サイト

作るもの

執筆時点で最新のver.6.2.1を利用します。
なお、本記事では下図を実現するためのHinemosマネージャ(下図の真ん中の青い四角)の設定を行います。
監視対象側の設定、監視の設定方法などは別の記事でまとめようと思います。

必要なもの

  • Hinemosマネージャ用のRHEL系マシン1台(RHEL7系) ※RHEL7であればマイナーバージョンはなんでもOK
  • Gmailアカウント(通知メールをリレーさせるため)

このページでは、下のような図の構成で示す通り、AWS上で動く管理対象マシンを監視するため、Hinemosマネージャを構築します。異常を検知した場合は、メールで異常の内容を通知するよう設定をしたいと思います。
メールはHinemosマネージャからGmailをリレーして送信されるように設定します。

components.png

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マネージャをインストールするために必要な作業は、下記の通りです。

  1. SELinuxの無効化
  2. OpenJDKのインストール
  3. スワップ領域の拡張(t2.small以上のインスタンスの場合は不要)

1. SELinuxの無効化

HinemosはSELinuxが有効化されているとインストールできないので、SELinuxを無効化します。

エディタで/etc/selinux/configを下記の通り変更します。
今後、rootユーザでないと実行できないコマンドが多く出てくるので、rootユーザでbashを開き直して実施するのが楽だと思います。

# rootユーザでbashを開く
sudo bash
# SELinuxの設定ファイルを編集
vi /etc/selinux/config
/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のパスワードを変更するで設定したのとパスワードに変更しましょう。

/opt/hinemos/etc/META-INF/persistence.xml
#変更前
<property name="javax.persistence.jdbc.password" value="hinemos"/>

#変更後
<property name="javax.persistence.jdbc.password" value="(新しいパスワード)"/>

同様に、次のファイルに対しても、PostgreSQLのパスワードを変更するで設定したのと同じパスワードを指定します。

vi /opt/hinemos/etc/db_account.properties
/opt/hinemos/etc/META-INF/persistence.xml
#変更前
hinemos_pass=hinemos

#変更後
hinemos_pass=(新しいパスワード)

これで、Hinemosの内部DBに対する設定は完了です。

Hinemos Webクライアントの設定

Hinemos Webクライアントの設定をしていきます。このページでは、大きく下記の2点を実施します。

  • アクセス制御設定
  • HTTPS化設定
Hinemos Webクライアントのアクセス制御

Hinemos Webクライアント側の設定として、アクセス制御の設定をしようと思います。
AWSのセキュリティグループでIPアドレスフィルタを設定するでも良いのですが、そうすると外出先で急遽サーバの状態を確認したい、などの場合に対応できない状況が想定されます。
かといって、セキュリティグループを設定せずに、どこからでもアクセスできる状態にしてしまうと、最悪Hinemosマネージャに不正アクセスされてしまうリスクがあります。ジレンマですね。

access.png

そんなジレンマ解決方法の1例として、Hinemos Webクライアントで設定可能なBASIC認証によるアクセス制御を実施します。これをすることで、下のようなダイアログが表示されるようになり、認証をクリアしないとアクセスすることができなくなります。
これで、少なくとも不特定多数の人間がHinemosマネージャにアクセスできないように制限することができますね。

スクリーンショット 2019-09-27 8.47.54.png

では、アクセス制御設定をするためにHinemosマネージャの下のファイルを編集します。

vi /opt/hinemos_web/conf/basic-auth-users.xml

下記のコメントアウト(<!-- ~~ -->)を外して、usernameとpasswordの値を変更します。

/opt/hinemos_web/conf/basic-auth-users.xml
<!-- 変更前 -->
<!--
  <role rolename="hinemos"/>
  <user username="user" password="<must-be-changed>" roles="hinemos"/>
-->

<!-- 変更後 -->
  <role rolename="hinemos"/>
  <user username="<任意のユーザ名>" password="<任意のパスワード>" roles="hinemos"/>

BASIC認証を利用するよう、web.xmlの設定内容を変更します。
具体的には、下記の該当部分のコメントアウトを外します。

/opt/hinemos_web/conf/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
/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)→アカウント」の順番でアカウント画面を開きます。
スクリーンショット 2019-12-01 18.17.46.png

右上にある「アカウント[ユーザ]」画面でhinemosユーザを選択して南京錠のアイコンをクリックします。
スクリーンショット 2019-12-01 18.18.10.png

新しいパスワードの入力を求められるので、パスワードを2回入力してログインパスワードを変更します。
スクリーンショット 2019-12-01 18.28.49.png

Gmailのリレー設定

Hinemosでメールでの通知を実現するために、Gmailのリレー設定を行います。
Gmailへのリレー設定をするためには、前提として2段階認証を設定する必要がありますので、まずは2段階認証設定を行ってください。
ここでは、HinemosからGmailへリレーするための設定方法を簡単に解説したいと思います。

1, Googleアカウントのページ に行く
2, 左のタブから「セキュリティ」を選択し、「Googleへのログイン」内の「アプリ パスワード」を選択
スクリーンショット 2019-11-23 16.00.21.png
3, 「アプリを選択」からメール、「デバイスを選択」から任意の名前を入力し、生成をクリック
スクリーンショット 2019-11-23 16.04.02.png
4, 表示されたパスワードをメモする
スクリーンショット 2019-12-01 17.59.59.png

SMTPサーバの設定(Hinemos側の転送設定)

転送予定のGmail側の設定が終わったので、次にHinemos側の転送設定を行います。

まず左上のメニューから「パースペクティブ(P)→メンテナンス」の順番でメンテナンス画面を開きます。
スクリーンショット 2019-12-01 18.14.50.png
「メンテナンス[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のリレー設定でパスワード取得に使用したアカウント(メールアドレス)

スクリーンショット 2019-12-01 18.15.41.png

これで、HinemosからGmailをリレーしてメールを通知する設定ができました。
・・・ここまで書いていたら長くなってしまったので、監視結果をメールで送信する方法は別の記事でまとめようと思います。

まとめ

本記事では、AWS上でHinemosをインストールし、下記の必要最低限の設定を行いました。

  • Hinemosの内部DB(PostgreSQL)のパスワード変更
  • Basic認証を利用したWebクライアントへのアクセス制限
  • Webクライアントとの通信のHTTPS化
  • 管理者アカウントのパスワード変更
  • メール通知をするためのGmailへのリレー設定

次の記事では、本記事でまとめた環境をもとに監視を行い、監視結果をメールで任意アドレスに通知する方法をまとめたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away