Graylog 5.2 をインストールする

メモ:  Category:ubuntu

サーバー、NW 機器、アプリケーションなどのログを一元管理し必要な情報を抽出・分析したいと思い調べていたのですが、とてもお高い。

Splunk や Sumo Logic、Datadog、LogPoint、ALog、EventLog Analyzer などなど、守備範囲や課金形態もまちまち。

Syslog サーバーへ集約してゴリゴリ見るのもつらそう。

そこで、ELK(Elasticsearch, Logstash, Kibana)や Graylog に辿り着き、一旦インストールしてみた結果 Graylog の方が導入しやすそうだったので、まずは Graylog をインストールしてみます。

Graylog の動作に必要なものは、次の通りです。

  • OpenSearch 1.x, 2.x
  • MongoDB 5.x or 6.x

Graylog のインストール

タイムゾーンの設定

インストールドキュメントから参照できるブログに、タイムゾーンを UTC とするよう推奨されていますのでマニュアルに従いタイムゾーンを設定します。

~$ sudo timedatectl set-timezone UTC

MongoDB のインストール

Ubuntu 22.04 では、公式パッケージとして MongoDB 5.x や 6.x がサポートされていないのでリポジトリ情報を追加します。

その準備として gnupg と curl をインストールします。

~$ sudo apt-get install gnupg curl

MongoDB 6.0 リポジトリの GPG キーをインポートします。(dearmor:バイナリに変換して保存)

~$ curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor

MongoDB 6.0 リポジトリを追加します。

~$ echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

念のため、リポジトリ情報が追加されているか確認します。

~$  sudo cat /etc/apt/sources.list.d/mongodb-org-6.0.list
deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse

正しく追加されていましたので、パッケージデータベースを再読み込みします。

~$ sudo apt-get update

MongoDB をインストールします。

~$ sudo apt-get install -y mongodb-org

Graylog のインストールドキュメントには、「sudo apt-key add -」とありリポジトリ鍵として GPG 公開鍵を登録するよう記載がありますので実行しておきます。

~$ wget -qO- 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf5679a222c647c87527c2f8cb00a0bd1e2c63c11' | sudo apt-key add -

OS 起動時に MongoDB が起動するようにし、 MongoDB を開始しておきます。

~$ sudo systemctl daemon-reload
~$ sudo systemctl enable mongod.service
~$ sudo systemctl restart mongod.service

サービスが起動しているか確認します。

:~$ sudo systemctl status mongod
● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-11-29 15:05:33 UTC; 23min ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 3370 (mongod)
     Memory: 68.5M
        CPU: 10.213s
     CGroup: /system.slice/mongod.service
             └─3370 /usr/bin/mongod --config /etc/mongod.conf

一応、インストールされた MongoDB のバージョンも確認しておきます。

~$ mongod --version
db version v6.0.12
Build Info: {
    "version": "6.0.12",
    "gitVersion": "21e6e8e11a45dfbdb7ca6cf95fa8c5f859e2b118",
    "openSSLVersion": "OpenSSL 3.0.2 15 Mar 2022",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2204",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

OpenSearch のインストール

OpenSearch も公式パッケージとしてサポートされていないのでリポジトリ情報を追加します。

OpenSearch リポジトリの GPG キーをインポートします。

~$ curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring

OpenSearch 2.x リポジトリを追加します。

~$ echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list

パッケージデータベースを再読み込みします。

~$ sudo apt-get update

OpenSearch をインストールします。

~$ sudo apt-get install opensearch

Graylog 用の設定をする

セキュアでない最小限の設定をします。

テキストエディターで、 OpenSearch の設定ファイルを修正していきます。

~$ sudo nano /etc/opensearch/opensearch.yml

次の設定を追加します。

cluster.name: graylog
node.name: ${HOSTNAME}
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
discovery.type: single-node
network.host: 0.0.0.0
action.auto_create_index: false
plugins.security.disabled: true

JVM のヒープメモリを実装メモリの半分に設定するとよいようですので設定を変更していきます。

~$ sudo nano /etc/opensearch/jvm.options

設定ファイルの次の部分を環境に合わせて修正します。

-Xms1g
-Xmx1g

プロセスが使用可能なメモリマップ領域の最大数を設定します。

~$ sudo sysctl -w vm.max_map_count=262144
~$ echo 'vm.max_map_count=262144' >> sudo /etc/sysctl.conf

OS 起動時に OpenSearch が起動するようにし、 OpenSearch を開始しておきます。

~$ sudo systemctl daemon-reload
~$ sudo systemctl enable opensearch.service
~$ sudo systemctl start opensearch.service

サービスが起動しているか確認します。

~$ sudo systemctl status opensearch.service
● opensearch.service - OpenSearch
     Loaded: loaded (/lib/systemd/system/opensearch.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-11-29 16:20:51 UTC; 1min 2s ago
       Docs: https://opensearch.org/
   Main PID: 4382 (java)
      Tasks: 63 (limit: 4516)
     Memory: 2.3G
        CPU: 18.538s
     CGroup: /system.slice/opensearch.service
             └─4382 /usr/share/opensearch/jdk/bin/java -Xshare:auto -Dopensearch.networkaddress.cache.ttl=60 -Dopensearch.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=tr>

Nov 29 16:20:43 ar-sv023 systemd[1]: Starting OpenSearch...
Nov 29 16:20:45 ar-sv023 systemd-entrypoint[4382]: WARNING: A terminally deprecated method in java.lang.System has been called
Nov 29 16:20:45 ar-sv023 systemd-entrypoint[4382]: WARNING: System::setSecurityManager has been called by org.opensearch.bootstrap.OpenSearch (file:/usr/share/opensearch/lib/opensearch-2.11.0.jar)
Nov 29 16:20:45 ar-sv023 systemd-entrypoint[4382]: WARNING: Please consider reporting this to the maintainers of org.opensearch.bootstrap.OpenSearch
Nov 29 16:20:45 ar-sv023 systemd-entrypoint[4382]: WARNING: System::setSecurityManager will be removed in a future release
Nov 29 16:20:45 ar-sv023 systemd-entrypoint[4382]: WARNING: A terminally deprecated method in java.lang.System has been called
Nov 29 16:20:45 ar-sv023 systemd-entrypoint[4382]: WARNING: System::setSecurityManager has been called by org.opensearch.bootstrap.Security (file:/usr/share/opensearch/lib/opensearch-2.11.0.jar)
Nov 29 16:20:45 ar-sv023 systemd-entrypoint[4382]: WARNING: Please consider reporting this to the maintainers of org.opensearch.bootstrap.Security
Nov 29 16:20:45 ar-sv023 systemd-entrypoint[4382]: WARNING: System::setSecurityManager will be removed in a future release
Nov 29 16:20:51 ar-sv023 systemd[1]: Started OpenSearch.

Graylog のインストール

Graylog もリポジトリ情報を追加します。

~$ wget https://packages.graylog2.org/repo/packages/graylog-5.2-repository_latest.deb
~$ sudo dpkg -i graylog-5.2-repository_latest.deb

パッケージデータベースを再読み込みします。

~$ sudo apt-get update

Graylog をインストールします。

~$ sudo apt-get install graylog-server

Graylog の設定を行います

Graylog 用に 2 つのパスワードを用意する必要があります。1 つは秘密のパスワードともう一つはログイン時に使用するパスワードから sha256 算出されたハッシュ値を設定します。

まずは秘密のパスワードですが、設定ファイルには「pwgen -N 1 -s 96」で生成するように書かれていますが、「pwgen」が無いため次のコマンドで生成します。

出力結果を控えておきます。

~$ < /dev/urandom tr -dc A-Z-a-z-0-9 | head -c${1:-96};echo;

次にログイン用のパスワードの設定値を取得します。ログイン用として使用するパスワードを入力するとハッシュ値が出力されるので、こちらも控えておきます。

~$ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Enter Password:
c8c27147a66ee4264e1c3fcfce00f49702ab5ab44fa540cdafb26359d011aa73

テキストエディタで「 /etc/graylog/server/server.conf 」を開きます。

password_secret = <秘密のパスワード>
root_password_sha2 = <sha256ハッシュ>
http_bind_address = <GraylogサーバのIPアドレス>:9000

Graylog のインストールドキュメントには「 elasticsearch_hosts 」の設定について書かれてますが、同じサーバーへ OpenSearch をインストールしているので「 elasticsearch_hosts 」についてはそのままにしています。

それでは、Graylog についても開始しておきます。

sudo systemctl daemon-reload
sudo systemctl enable graylog-server.service
sudo systemctl start graylog-server.service

Graylog が起動していることを確認します。

:~$ sudo systemctl status graylog-server
● graylog-server.service - Graylog server
     Loaded: loaded (/lib/systemd/system/graylog-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-11-29 17:36:55 UTC; 4min 24s ago
       Docs: http://docs.graylog.org/
   Main PID: 809 (graylog-server)
      Tasks: 253 (limit: 4516)
     Memory: 992.9M
        CPU: 24.936s
     CGroup: /system.slice/graylog-server.service
             ├─809 /bin/sh /usr/share/graylog-server/bin/graylog-server
             └─840 /usr/share/graylog-server/jvm/bin/java -Xms1g -Xmx1g -server -XX:+UseG1GC -XX:-OmitStackTraceInFastThrow -Djdk.tls.acknowledgeCloseNotify=true -Dlog4j2.formatMsgNoLookups=true -jar -Dlog4j.>

Nov 29 17:36:55 ar-sv023 systemd[1]: Started Graylog server.

起動には少し時間がかかるようですので、 Graylog のログに「Graylog server is up and running」があることを確認します。

~$ sudo tail -f /var/log/graylog-server/server.log

起動が確認出来たらブラウザーから「http://< Graylog サーバーの IP アドレス:9000>/」へアクセスし、ログイン画面が表示されることを確認します。

Graylog ログイン

ユーザ名は「admin」、設定したパスワードでログイン出来たらインストール完了です。

bluenote by BBB