ウェブサイト検索

Ansible Automation を使用して Graylog サーバーをインストールする方法 |


Ansible ロールを使用して Ubuntu/Debian/CentOS Linux システムに Graylog サーバーをデプロイする方法に関するこのガイドへようこそ。 Graylog は、無料のオープンソースのログ集約および管理ツールです。ログを収集、分析、視覚化し、ログに基づいてアラートを送信するために使用されます。 Graylog サーバーは、次の 4 つのコンポーネントで構成されています。

  • Graylog サーバー – Web インターフェイスで視覚化するためにログを渡すサーバー。
  • MongoDB – これは、データと構成を保存するために使用されるデータベース サーバーです。
  • ElasticSearch – これは、Graylog サーバーのログ分析ツールです。
  • Java – ElasticSearch のランタイム環境を提供します。

これらすべてのツールは連携して、ログの集約と管理という主な目的を実現します。 Ansible を使用して Graylog サーバーをデプロイすると、再帰的なタスクを簡単に自動化できます。接続されたノードを管理できるようにするには、他のオーケストレーション ツールと同様に、Ansible を制御ノードにインストールする必要があります。

ansible を使用したこのインストールは現在、次のシステムで動作します。

  • CentOS/RHEL: CentOS 7/8、RHEL 7/8
  • Debian: Debian 10/Debian 9
  • Ubuntu: Ubuntu 20.04/Ubuntu 18.04

Puppet のインストール方法をご希望の場合は、以下のリンクにある最新のガイドをご確認ください。

  • Puppet を使用して Graylog サーバーのインストールを自動化する

これをどのように達成できるかを詳しく見てみましょう。

ステップ 1. ワークステーションに Ansible をインストールして構成する

Ansible は、いくつかの方法を使用してコントロール ノードにインストールできます。 Linux ディストリビューションにインストールする最も簡単な方法は、PIP を使用することです。この方法を続行する前に、Python と PIP がインストールされている必要があります。

##On Ubuntu
sudo apt update
sudo apt install python3 python3-pip -y

##On CentOS
sudo yum install python3 python3-pip -y

次に、インストールされた PIP を使用して Ansible をインストールします。

sudo pip3 install ansible

macOS では、brew を使用して Ansible をインストールできます

brew install ansible

インストールを確認します。

$ ansible --version
ansible [core 2.12.4]
  config file = None
  configured module search path = ['/home/ubuntu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/ubuntu/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
  jinja version = 2.10.1
  libyaml = True

Ansible は、デフォルトのパッケージ リポジトリからインストールすることもできます。

##On Ubuntu / Debian
sudo apt install ansible

##On CentOS
sudo yum install epel-release
sudo yum install ansible

Ansible Hosts インベントリ ファイルを作成する

このファイルは、Ansible コントロール ノードによって管理されるノードで構成されます。

$ sudo vim /etc/ansible/hosts
[graylog]
192.168.205.9 ansible_ssh_user=username

以下のコマンドの「username 」を管理対象ノードのユーザー名に置き換えます。管理対象ノードの SSH キーを生成し、制御ノードにコピーします。

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub username@192.168.205.9

これにより、追加したノードをパスワードなしで制御できるようになります。これが機能するかどうかをテストします。

$ ansible -m ping all
192.168.205.9 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

ステップ 2. Graylog Ansible ロールをインストールする

Graylog Ansible ロールを使用すると、Graylog をインストールして構成できます。これは次のコマンドを使用してインストールできます。

$ ansible-galaxy install graylog2.graylog
Starting galaxy role install process
- downloading role 'graylog', owned by graylog2
- downloading role from https://github.com/Graylog2/graylog-ansible-role/archive/3.3.7.tar.gz
- extracting graylog2.graylog to /Users/jkmutai/.ansible/roles/graylog2.graylog
- graylog2.graylog (3.3.7) was installed successfully
- adding dependency: lean_delivery.java (7.1.0)
- adding dependency: elastic.elasticsearch (main)
- downloading role 'java', owned by lean_delivery
- downloading role from https://github.com/lean-delivery/ansible-role-java/archive/7.1.0.tar.gz
- extracting lean_delivery.java to /Users/jkmutai/.ansible/roles/lean_delivery.java
- lean_delivery.java (7.1.0) was installed successfully
- extracting elastic.elasticsearch to /Users/jkmutai/.ansible/roles/elastic.elasticsearch
- elastic.elasticsearch (main) was installed successfully

上記の出力から、以下の依存関係がインストールされていることがわかります。

  • ジャワ
  • エラスティックサーチ

次のコマンドを使用して、Graylog Ansible ロールの依存関係がインストールされているかどうかを確認します。

ansible-galaxy install -r ~/.ansible/roles/graylog2.graylog/requirements.yml

~/.ansible/roles/graylog2.graylog/ を、Graylog Ansible ロールの正しいパスに置き換えてください。

ステップ 3. Ansible ロールを使用して Graylog サーバーをデプロイする

単一インスタンスの Graylog サーバー インストール用のプレイブック YAML を作成します。

vim graylog-playbook.yaml

ファイルには以下の行が含まれます。

- hosts: "graylog"
  remote_user: "username"
  become: True
  vars:
    #Elasticsearch vars
    es_major_version: "7.x"
    es_version: "7.10.2"
    es_enable_xpack: False
    es_instance_name: "graylog"
    es_heap_size: "1g"
    es_config:
      node.name: "graylog"
      cluster.name: "graylog"
      http.port: 9200
      transport.tcp.port: 9300
      network.host: "127.0.0.1"
      discovery.seed_hosts: "localhost:9300"
      cluster.initial_master_nodes: "graylog"
    oss_version: True
    es_action_auto_create_index: False

    #Graylog vars
    graylog_version: 4.2
    graylog_install_java: True
    graylog_password_secret: "ncc4jque0VvGImadZ7jzX26NrESt30dY4U4nNfZWAXubcvUGDKnMjbC4eEAU0KcfWX6CDk4ME80CrYPP9ErpvyFPXc2H2xKf" # Insert your own here. Generate with: pwgen -s 96 1
    graylog_root_password_sha2: "434e27fac24a15cbf8b160b7b28c143a67d9e6939cbb388874e066e16cb32d75" # Insert your own root_password_sha2 here.
    graylog_http_bind_address: "{{ ansible_default_ipv4.address }}:9000"
    graylog_http_publish_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
    graylog_http_external_uri: "http://{{ ansible_default_ipv4.address }}:9000/"

  roles:
    - role: "graylog2.graylog"
      tags:
        - "graylog"

生成された graylog_password_secret を次のコマンドで置き換えることを忘れないでください。

$ pwgen -N 1 -s 96
ncc4jque0VvGImadZ7jzX26NrESt30dY4U4nNfZWAXubcvUGDKnMjbC4eEAU0KcfWX6CDk4ME80CrYPP9ErpvyFPXc2H2xKf

また、 次のコマンドを使用して生成された greylog_root_password_sha2 を置き換えます。

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

次に、Graylog サーバーをデプロイします。

ansible-playbook graylog-playbook.yaml

## With custom inventory file ###
ansible-playbook graylog-playbook.yaml -i myinventory

サンプル出力:

上記のコマンドがsudo パスワードがありません」} というエラーで失敗した場合は、管理対象ホスト上の /etc/sudoers ファイルを編集し、リモート ユーザーが sudo コマンドを実行できるようにする必要があります。パスワードなしで。

コマンドの後、3 つのサービス (MongoDB、Elasticsearch、Graylog) がすべて管理対象ノード上で実行されているはずです。

Elasticsearch が実行されているかどうかを確認します。

$ curl -X GET localhost:9200
{
  "name" : "graylog",
  "cluster_name" : "graylog",
  "cluster_uuid" : "O6qVFbgjQvmTDZ3j-cAVSg",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "oss",
    "build_type" : "rpm",
    "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Ansible を使用した Graylog クラスターのデプロイ (HA の場合はオプション)

より多くの Elasticsearch インスタンスと Graylog インスタンスを含むGraylog クラスターをデプロイすることも可能です。以下の例には、3 つの Elasticsearch インスタンスと 3 つの Graylog インスタンスが含まれています。

まず、Elasticsearch クラスターをデプロイします。

- hosts: "elasticsearch"
  vars:
    es_major_version: "7.x"
    es_version: "7.10.2"
    es_enable_xpack: False
    es_instance_name: "graylog"
    es_heap_size: "1g"
    es_config:
      node.name: "{{ ansible_hostname }}"
      cluster.name: "graylog"
      http.port: 9200
      transport.port: 9300
      network.host: "0.0.0.0"
      discovery.seed_hosts: "elasticsearch01:9300, elasticsearch02:9300, elasticsearch03:9300"
      cluster.initial_master_nodes: "elasticsearch01, elasticsearch02, elasticsearch03"
    oss_version: True
    es_action_auto_create_index: False

  roles:
    - role: "elastic.elasticsearch"

次に、MongoDB インスタンスをデプロイします。

- hosts: "graylog"
  vars:
    mongodb_version: "4.4"
    bind_ip: "0.0.0.0"
    repl_set_name: "rs0"
    authorization: "disabled"
  roles:
    - community.mongodb.mongodb_repository
    - community.mongodb.mongodb_mongod
  tasks:
    - name: "Start MongoDB"
      service:
        name: "mongod"
        state: "started"
        enabled: "yes"

- hosts: "graylog01"
  tasks:
    - name: "Install PyMongo"
      apt:
        update_cache: yes
        name: "python3-pymongo"
        state: "latest"
    - name: Configure replicaset
      community.mongodb.mongodb_replicaset:
        login_host: "localhost"
        replica_set: "rs0"
        members:
        - graylog01
        - graylog02
        - graylog03

最後に、Graylog インスタンスをデプロイします。

- hosts: "graylog"
  vars:
    graylog_is_master: "{{ True if ansible_hostname == 'graylog01' else False }}"
    graylog_version: 4.2
    graylog_install_java: False
    graylog_install_elasticsearch: False
    graylog_install_mongodb: False
    graylog_password_secret: "" # Insert your own here. Generate with: pwgen -s 96 1
    graylog_root_password_sha2: "" # Insert your own root_password_sha2 here.
    graylog_http_bind_address: "{{ ansible_default_ipv4.address }}:9000"
    graylog_http_publish_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
    graylog_http_external_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
    graylog_elasticsearch_hosts: "http://elasticsearch01:9200,http://elasticsearch02:9200,http://elasticsearch03:9200"
    graylog_mongodb_uri: "mongodb://graylog01:27017,graylog02:27017,graylog03:27017/graylog"

  roles:
    - role: "graylog2.graylog"

これにより、3 つの Elasticsearch インスタンスと 3 つの Graylog インスタンスを含む Graylog クラスターが作成されます。

ステップ 4. Graylog Web インターフェイスにアクセスする

次に、ポート 9000 がファイアウォールを通過できるようにします。

##For Firewalld
sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --reload

##For UFW
sudo ufw allow 9000/tcp

続行し、URL http://IP_adress:9000 を使用して Graylog Web インターフェイスにアクセスします。

デフォルトのユーザー admin と、graylog_root_password_sha2 で設定されたパスワードを使用してログインします。認証が成功すると、以下のダッシュボードにアクセスできるようになります。

次に、入力を構成して、Graylog Web インターフェイス上でログを視覚化するダッシュボードを作成します。

評決

Ansible ロールを使用して、Graylog サーバーを Ubuntu/CentOS に正常にデプロイしました。 Ansible を使用すると、複数のサーバーで反復的なタスクを簡単に実行できることに誰もが同意します。これがあなたにとって有意義だったことを願っています。

関連記事:

  • Ubuntu に Ansible AWX をインストールする方法
  • CentOS 8/Rocky Linux 8 に Ansible AWX をインストールする
  • Ubuntu 上の Graylog サーバーでログを管理する

関連記事: