ログファイルを解釈し、安全な環境に保存し、分析のために適切に整理されたデータを収集できるシステムをお探しですか? Dockerを使用してGraylogでログ管理を一元化することは、あなたが探しているものかもしれません!
このチュートリアルでは、GraylogとDockerを使用して、UbuntuマシンからSyslogデータを収集するための集中ログシステムを構築する方法を学習します。
読んで、ログ管理の一元化を始めましょう!
この投稿は、ステップバイステップのチュートリアルになります。フォローするには、必ず次のものを用意してください。
- 2台のUbuntuマシン(1台のホストと1台のクライアント)–このチュートリアルではUbuntu 20.04を使用しますが、他のLinuxディストリビューションでも機能します。
- Rsyslog クライアントマシン上。
- ホストマシンにDockerがインストールされています。このチュートリアルで使用されるDockerのバージョンは20.10.7です
- Docker-composeがホストマシンにインストールされています。
- ランダムなシークレットパスワードを生成するには、ホストマシンにPwgenユーティリティをインストールする必要があります。
DockerComposeを使用したGraylogのデプロイ
とにかくGraylogとは何ですか?グレイログはオープンソースのログ管理プラットフォームです。 Graylogは、ソースから構造化データと非構造化データを収集、インデックス付け、分析できます。これらのソースの1つは、リアルタイムのオペレーティングシステムです。
Graylogをデプロイする前に、まずDockerComposeを使用してホストマシンにGraylogをインストールする必要があります。
クラウドベースのUbuntu20.04コンピューターを使用しているとします。その場合、次のポートを許可するようにセキュリティグループまたはファイアウォールルールを変更する必要があります:
1514
および12201
TCP接続とUDP接続の両方、および9000
TCP接続のみ。
1.お気に入りのSSHクライアントを開き、マシンに接続します。
2.次に、以下のコマンドを実行して、ホームディレクトリに新しいディレクトリを作成し、そのディレクトリに切り替えます。ディレクトリには好きな名前を付けることができます。ただし、このデモでは、ディレクトリの名前は〜/graylogです。
mkdir graylog
cd graylog
3. docker-compose.ymlという名前のYAMLファイルを作成します 〜/ graylog ディレクトリを作成し、ファイルに以下の構成を入力します。ただし、まだ変更を保存しないでください。 Graylogログインを保護し、データへのアクセスを制限するには、秘密のパスワードを生成する必要があります。
新しく作成されたファイルには、Graylog、MongoDB、およびElasticSearchコンポーネントをセットアップするための構成が含まれています。 Graylogを効果的に機能させるには、Graylogでこれらすべてのコンポーネントをセットアップし、同時に実行する必要があります。
version: '2'
services:
# MongoDB: https://hub.docker.com/_/mongo/
MongoDB: # Mongodb service
image: mongo:4.2 # Version of Mongodb docker image
volumes:
- mongo_data:/data/db # Persisted mongodb data
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
elasticsearch: # ElasticSearch service
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 # Version of elasticsearch image
volumes:
- es_data:/usr/share/elasticsearch/data # Persisted elasticsearch data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
# Unlimited amount of memory set for elasticsearch container
memlock:
soft: -1
hard: -1
# Resource limit for elasticsearch set to 1 gigabyte
mem_limit: 1g
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:4.2 # Version of Graylog docker image
volumes:
- graylog_data:/usr/share/graylog/data # Persisted Graylog data
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
- GRAYLOG_WEB_ENDPOINT_URI=http://127.0.0.1:9000/api
# Command to run as soon as components are started
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
# Containers that Graylog depends on
links:
- mongodb:mongo
- elasticsearch
restart: always # Graylog container set to always restart when stopped
depends_on:
- mongodb
- elasticsearch
ports:
# Graylog web interface and REST API
- 9000:9000
# Syslog TCP
- 1514:1514
# Syslog UDP
- 1514:1514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
# Volumes for persisting data, see https://docs.docker.com/engine/admin/volumes/volumes/
volumes:
mongo_data:
driver: local
es_data:
driver: local
graylog_data:
driver: local
4.次に、pwgen
を実行します 以下のコマンドを使用して、単一のランダムパスワードを生成します(-N
)with 96(-s 96
)文字。
pwgen -N 1 -s 96
5.生成されたシークレットパスワードは次のようになります。 docker-compose.yml で設定するので、秘密のパスワードをメモします ファイル(ステップ6)。
6. docker-compose.ymlに戻ります ファイルを作成してsomepasswordpepper
を置き換えます GRAYLOG_PASSWORD_SECRET
で 新しく生成されたシークレットパスワードを使用します(ステップ5)。このパスワードは、パスワードの暗号化とソルティングに使用します。この秘密のパスワードがないと、Graylogコンテナは起動しません。
7.以下のコマンドを実行して、選択したパスワードのSHA2ハッシュを生成します。このパスワードは、Graylogへの最初のログインに必要です。
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
以下に示すように、プロンプトが表示されたら、選択した管理者パスワードを入力し、Enterキーを押します。パスワードを入力すると、ハッシュされたパスワードが生成されます。
docker-compose.yml で設定するので、ハッシュ化されたパスワードをメモします ファイル(ステップ8)。
8. GRAYLOG_ROOT_PASSWORD_SHA2
の値を置き換えます docker-compose.ymlの環境変数 以前に生成したSHA2ハッシュパスワードを使用してファイルします(ステップ7)。変更をdocker-compose.ymlに保存します ファイルを作成してエディタを終了します。
9.最後に、docker-compose up
を実行します 以下のコマンドを使用して、ElasticSearch、MongoDB、Graylog Dockerコンテナーをデタッチモード(-d
)でデプロイします )。このコマンドは、Dockerハブからそれらをプルし、Graylogが正しく機能するためのコンテナーとしてそれらを起動します。
# Starting up MongoDB, ElasticSearch, and Graylog containers in detached mode
sudo docker-compose up -d
以下の画像は、MongoDB、ElasticSearch、Graylog DockerイメージがDockerハブからプルされ、コンテナーとして開始されたことを示しています。
ElasticSearchのインデックスシャード値の変更
グレイログを導入したばかりです。これは、ログ管理の一元化における大きな前進です。しかし、今度は、Graylogを構成するときです。実行しているElasticSearchノード/コンテナーの数に応じてElasticSearchシャードの値を変更します。
シャードは、Elasticsearchが複数のノードにデータを分散するユニットです。ノードあたりの最適なシャード数は1つです。
1.お気に入りのWebブラウザを開き、 https://
adminと入力します ユーザー名として、「Docker Composeを使用したGraylogのデプロイ」セクション(ステップ7)で作成した管理者パスワードを入力します。このチュートリアルでは、パスワードはadamtheautomatorです。
ログインすると、以下に示すように、Graylogの[はじめに]ページが表示されます。
2.次に、システムをクリックします メニュー—>インデックス 、以下に示すように、インデックスとインデックスにアクセスするには ページ(ステップ3)では、デフォルトのインデックスセットを編集することを選択できます。
3.編集をクリックします Graylogのデフォルトのインデックスセットを管理し、ElasticSearchシャード値を変更します。 ElasticSearchシャードのデフォルト値は4であり、これを変更する必要があります(ステップ4)。
4.最後に、ElasticSearchシャードの数を1に変更します( 1 )単一のElasticSearchノード/コンテナーのみを実行しているため、保存をクリックします ページの下部にあります。
Syslogからログを収集するためのGraylogの設定
ElasticSearchのインデックスシャードの値を変更してGraylogを設定しました。ただし、クライアントマシンのSyslogからログデータを収集するようにGraylogを設定する必要もあります。どのように?ホストマシンで解析するためにSyslogを介してクライアントマシンから送信されたログデータを受信するようにGraylog入力を設定します。
Syslogを標準のネットワークベースのログプロトコルとして使用すると、クライアントマシンのイベントメッセージまたはログデータをGraylogに転送できます。
1.システムをクリックします メニュー—>入力 入力にアクセスするには このページでは、SyslogUDP入力を設定します。
2. Syslog UDPを検索して選択します 以下に示すように、検索ボックスで[新しい入力を起動]をクリックします。 。
3.最後に、新しいSyslogUDP入力を構成します 次のようにして、保存をクリックします ポップアップウィンドウの下部にあり、変更を保持して適用します:
- ノードからノードを選択します ドロップダウンボックス。
- タイトルを設定します あなたが望むどんな言葉にも。このデモのタイトルはsyslogです 。
- バインドアドレスを設定します 0.0.0.0、 そのため、Graylogはどこからでも着信イベントを聞くことができます。
- ポートを設定します SyslogUDPポート
1514
へ docker-compose.ymlで定義されているとおりSyslog UDP
の下のファイル 。
以下に、SyslogUDP入力がローカル入力の一部として実行されていることを示します。 構成後。
SyslogデータをGraylogに送信するためのRsyslogの構成
クライアントマシンから送信されたデータを受信するようにSyslogUDP入力を設定しましたが、どのようにデータをGraylogに送信しますか? Rsyslogがそのトリックを行います!
Rsyslogの構成ファイルを作成して、Syslogデータをクライアントマシンからホストマシンで実行されているGraylogにプッシュします。
1. /etc/rsyslog.dに構成ファイルを作成します クライアントマシンのディレクトリ。ファイルには任意の名前を付けることができますが、このデモではファイルの名前は90-graylog.confです。
2.次に、次の行を 90-graylog.confに追加します。 ファイルを作成し、変更を保存してエディタを閉じます。 34.76.103.44
を置き換えます Graylogが実行されているホストマシンのIPアドレスを使用します。
以下の構成は、Syslogデータ(RSYSLOG_SyslogProtocol23Format
)ホストマシンから(@34.76.103.44
)Graylogに。
*.* @34.76.103.44:1514;RSYSLOG_SyslogProtocol23Format
3.以下のコマンドを実行して、rsyslog
を再起動します 変更を有効にします。
sudo systemctl restart rsyslog
4. Graylog Webインターフェイスに戻り、検索をクリックします。 以下のようにきちんと解析されたSyslogデータを表示するメニュー。
このチュートリアルでは、Dockerを使用してGraylogで独自の集中ログ管理システムを作成する方法を学び、クライアントマシンから正常に収集されたSyslogデータを検証しました。
この時点で、分析のために適切に整理されたデータを安全な環境に収集して保存することは、もはや苦痛ではないことに気づきました。
Graylogで他にどのようなログを収集できますか?おそらく、さらに解析と分析を行うためにNGINXログをGraylogに送信するようにWebホストを設定しますか?