The Elastic Stack(以前はELK Stackとして知られていました)は、集中ログ管理のための強力なソリューションです。これは、Elasticによって開発されたオープンソースソフトウェアのコレクションです。これにより、管理者は任意のソースから任意の形式で生成されたログを検索、分析、可視化できます。これは集中ログ管理と呼ばれる手法の一種です。集中ログ管理は、単一の場所からすべてのログを検索できるため、サーバーやアプリケーションの問題を特定する際に非常に便利です。また、特定の時間のログを関連付けることで、複数のサーバーにわたる問題を特定するのにも役立ちます。
このガイドでは、次の環境にElastic Stackをインストールする方法を紹介します:Ubuntu 18.04。まず、チュートリアルに従って、簡単にCloudSigma上でUbuntuサーバーをセットアップ(インストール)してください。.
Ubuntu上のElastic Stack
Elastic Stackは以下のコンポーネントで構成されています:
- Elasticsearch:分散型RESTful検索エンジン。収集されたすべてのデータを保存します。
- Logstash::Elastic Stackのデータ処理コンポーネントです。受信したデータをElasticsearchに送信します。
- Kibana: 検索およびログ可視化機能を提供するWebインターフェースです。
- Beats::軽量で単一目的のデータ転送ツールです。多数のマシンからLogstashまたはElasticsearchにデータを送信できます。
スタックの各コンポーネントを手動でインストールする必要があります。
前提条件
次のインストールを進める前に:the Elastic Stack。いくつかのシステム要件を満たす必要があります:
- ハードウェア要件:
- CPU:2 CPU(非rootのsudoユーザーからアクセス可能)
- RAM:4GB
- OpenJDK 11(最新のJava LTSリリース)。これをインストールするには、当社のUbuntu 18.04でJavaをセットアップする方法に関するチュートリアル.
- 適切な設定が施されたNginx。当社のUbuntu 18.04にNginxをインストールするガイドを参照してセットアップしてください。
ストレージ容量は、収集および保存するログの数によって異なることに注意してください。さらに、Elastic Stackはサーバーに関する貴重な情報も扱います。データ転送の安全性を維持するために、TLS/SSL証明書を設定することを強くお勧めします。次のチュートリアルに従って、Nginxサーバーで無料のSSL証明書を取得してください。.
暗号化されたサーバーに加えて、以下の手順も必要になります:
- FQDN(完全修飾ドメイン名)。このガイドでは <domain> とします。
- 以下の両方のドメインのDNSレコードがサーバーを指していること。
- サーバーのパブリックIPを指す <domain> のAレコード。
- サーバーのパブリックIPを指す www.<domain> のAレコード。
Elastic Stackのインストール
-
Elasticリポジトリの設定
Elastic Stackのコンポーネントは、公式のUbuntuリポジトリから直接利用することはできません。幸いなことに、Ubuntuではサードパーティ(3rd)のリポジトリを使用してパッケージをインストールできます。ここでは、Elasticパッケージリポジトリを追加します。このリポジトリは、すべてのElasticパッケージの最新のアップデートを提供します。すべてのElasticパッケージは、パッケージのなりすましを防ぐためにElasticsearch署名キーで署名されています。まず、Ubuntuのキーリングにキーを追加します:
|
1 |
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - |
次に、“sources.list.d”ディレクトリの下にElasticのソースリストを追加します。これは、APTが新しいソースを検索するために使用する専用のディレクトリです:
|
1 |
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list |
最後に、APTキャッシュを更新します:
|
1 |
sudo apt update |
公式ドキュメントによると、このガイドで示されている順序で各コンポーネントをインストールすることをお勧めします。これにより、各製品が依存するコンポーネントが適切な場所に配置されます。
-
Elasticsearchのインストールと設定
Elasticリポジトリが設定されると、APTはすべてのElasticパッケージをダウンロードしてインストールする準備が整います。次のコマンドを実行してElasticsearchをインストールします:
|
1 |
sudo apt install elasticsearch |
これでElasticsearchを設定できます。「elasticsearch.yml」ファイルには、クラスター、ノード、パス、ネットワーク、メモリ、ゲートウェイなどの設定オプションが含まれています。そのほとんどは、ファイル内で事前に設定されています。次に、お好みのテキストエディタでElasticsearchの設定ファイルを開きます。
|
1 |
sudo vim /etc/elasticsearch/elasticsearch.yml |
Elasticsearchはどこからでもポート9200でリッスンします。外部の者がデータを読み取ったり、REST APIを使用してElasticsearchクラスターをシャットダウンしたりするのを防ぐため、Elasticsearchへの外部アクセスを制限することをお勧めします。Elasticsearchへのアクセスを制限し、セキュリティを強化するには、次の行のコメントアウトを解除し、その値を置き換えます。
|
1 |
network.host: localhost |
Elasticsearchが特定のIPアドレスをリッスンするようにする場合は、「localhost」を対象のIPアドレスに置き換えてください。これは、Elasticsearchを実行する前の最小限の設定要件です。設定ファイルを保存して閉じます。次に、Elasticsearchサービスを開始します。Elasticsearchの起動には少し時間がかかる場合があります。
|
1 |
sudo systemctl start elasticsearch |
その後、サーバーが起動するたびにElasticsearchが開始されるようにする必要があります。
|
1 |
sudo systemctl enable elasticsearch |
次のコマンドは、Elasticsearchサービスが実行されているかどうかを確認します。必要なのはHTTPリクエストを送信することだけです。
|
1 |
curl -X GET "localhost:9200" |
レスポンスは次のようになります。ローカルノードに関するいくつかの基本情報を示すレスポンスになります。
Kibanaダッシュボードのインストールと設定
KibanaはElasticリポジトリから直接利用できます。Kibanaは、すでにElasticsearchをインストールした後にのみインストールする必要があることに注意してください。リポジトリがすでに利用可能であると仮定すると、APTはKibanaを直接取得してインストールできます。
|
1 |
sudo apt install kibana |
インストールしたら、Kibanaサービスを有効にして開始します。
|
1 2 |
sudo systemctl enable kibana sudo systemctl start kibana |
デフォルトでは、Kibanaは「localhost」のみをリッスンするように設定されています。外部からアクセスするには、リバースプロキシの設定が必要です。ここでは、Nginxがリバースプロキシになります。管理用のKibanaユーザーを作成するには、opensslコマンドを使用します。これは、Kibana Webインターフェースにアクセスするためのユーザーアカウントになります。ここでは、例としてユーザー名を「kibana_admin」とします。セキュリティを向上させるために、標準的ではないユーザー名を使用することをお勧めします。次のコマンドは、Kibanaの管理者ユーザーを作成します。ユーザー名とパスワードが生成され、「htpasswd.users」ファイルに保存されます。Nginxは、このユーザー名とパスワードを使用するように設定する必要があります。
|
1 |
echo "kibana_admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users |
プロンプトでパスワードを入力し、確認します。このパスワードは、Kibanaインターフェースにアクセスするために重要になります。その後、Nginxサーバーブロックファイルを作成する必要があります。デモンストレーション用として、ここではexample.comとします。他のわかりやすい名前にすることもできます。サーバーにFQDNとDNSレコードが設定されている場合は、ファイル名をFQDNに合わせることもできます。
|
1 |
sudo vim /etc/nginx/sites-available/example.com |
既存のコンテンツがある場合は、その内容を削除し、次のコード行に置き換えます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 80; server_name example.com; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.users; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } |
ファイルを保存して閉じます。「sites-enabled」ディレクトリの下に新しい設定のシンボリックリンクを作成します。同じファイル名で既存のリンクがすでに存在する場合、この手順は不要な場合があります。
|
1 |
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com |
次のコマンドを実行すると、Nginxが構文エラーの有無をチェックします:
|
1 |
sudo nginx -t |
構文に問題がある場合は、ファイルの内容が正しく配置されているか確認してください。次に、Nginxサービスを再起動します:
|
1 |
sudo systemctl restart nginx |
Tell UFWにNginxへの接続を許可するように指示します:
|
1 |
sudo ufw allow 'Nginx Full' |
これで、Elastic StackサーバーのFQDNまたはパブリックIPアドレスを介してKibanaにアクセスできるようになります。Kibanaサーバーのステータスページを確認します:
|
1 |
http://<server_ip>:5601/status |
Logstashのインストールと設定
BeatsはElasticsearch’sのデータベースに直接データを送信できますが、データの処理にはLogstashを使用することをお勧めします。Logstashはデータを収集し、別のデータベースにエクスポートする前に共通の形式に変換できます。次のAPTコマンドを実行してLogstashをインストールします。
|
1 |
sudo apt install logstash |
インストールが完了したら、Logstashを設定します。Logstashの設定ファイルはJSON形式です。これらはすべて「/etc/logstash/conf.d」ディレクトリにあります。Logstashをパイプラインとして考えるとわかりやすいでしょう。一方の端からデータを取り込み、処理して、送信先に送り出します。Logstashパイプラインには、2つの必須要素 – input と output 、および1つのオプション要素 – filter が必要です。inputプラグインはデータを取り込み、filter プラグインはデータを処理し、output プラグインはデータを送信先に書き込みます。次のコマンドは、Filebeat入力用にLogstashを設定する設定ファイルを作成します:
|
1 |
sudo vim /etc/logstash/conf.d/02-beats-input.conf |
次の input 設定を入力します。これは、TCPのポート5044でリッスンする beats 入力を記述しています:
|
1 2 3 4 5 |
input { beats { port => 5044 } } |
次のステップは、「10-syslog-filter.conf」という設定ファイルを作成することです。これを使用して、syslogs(システムログ)のフィルターを設定します:
|
1 |
sudo vim /etc/logstash/conf.d/10-syslog-filter.conf |
次の syslog 設定コードを入力します。このコードは、Elastic guideから直接入手できます。このコードは、Logstashへのinput設定を説明しています:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
input{ beats{ port => 5044 host => "0.0.0.0" } } filter { if [fileset][module] == "system" { if [fileset][name] == "auth" { grok { match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] } pattern_definitions => { "GREEDYMULTILINE"=> "(.|\n)*" } remove_field => "message" } date { match => [ "[system][auth][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } geoip { source => "[system][auth][ssh][ip]" target => "[system][auth][ssh][geoip]" } } else if [fileset][name] == "syslog" { grok { match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] } pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" } remove_field => "message" } date { match => [ "[system][syslog][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } } } |
次の設定ファイルは出力を扱います。「30-elasticsearch-output.conf」という新しいファイルを開きます。
|
1 |
sudo vim /etc/logstash/conf.d/30-elasticsearch-output.conf |
次のコードを入力します。このコードはLogstashへの出力設定を説明しています。
|
1 2 3 4 5 6 7 |
output { elasticsearch { hosts => ["localhost:9200"] manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" } } |
Logstashの設定をテストします。次に、以下のコマンドを実行します。
|
1 |
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t |
エラーがなければ、Logstashは次の成功メッセージを出力します。成功しなかった場合は、すべての設定ファイルに適切なコードが記述されているか確認してください。最後に、Logstashサービスを起動して有効にします。
|
1 2 |
sudo systemctl start logstash sudo systemctl enable logstash |
Logstashが正常に動作し、完全に設定されたので、Filebeatをインストールしましょう。
Filebeatのインストールと設定
Elastic Stackは、さまざまなソースからデータを収集してLogstashやElasticsearchに転送するために、「Beats」と呼ばれるデータシッパーを使用します。以下は、Elasticから提供されている利用可能なBeatsのリストです。
- Filebeat: ログファイルの収集と転送。
- Metricbeat: システムやサービスからのメトリクスの収集と転送。
- Packetbeat: ネットワークデータの収集と分析。
- Winlogbeat: Windowsイベントログの収集。
- Auditbeat: Linux監査フレームワークデータの収集とファイルの整合性監視。
- Heartbeat: サービスの可用性監視。
このチュートリアルでは、ローカルログをElastic Stackに転送するためにFilebeatが必要になります。まず、Filebeatをインストールします。
|
1 |
sudo apt install filebeat |
Filebeatの設定ができるようになりました。まず、Logstashに接続する必要があります。Filebeatに付属しているサンプル設定を使用します。テキストエディタで設定ファイルを開きます。ファイルはYAML形式であるため、適切なインデントが重要であることに注意してください:
|
1 |
sudo vim /etc/filebeat/filebeat.yml |
「output.elasticsearch」セクションを探し、以下の行をコメントアウトします。これにより、Filebeatが追加処理のためにイベントをElasticsearch/Logstashに直接送信するように設定されます。次に、「output.logstash」セクションに移動します。次に、以下の行のコメントアウトを解除します:
|
1 2 3 4 5 6 7 |
#output.elasticsearch: # 接続するホストの配列。 # hosts: ["localhost:9200"] output.logstash: # Logstashのホスト hosts: ["localhost:5044"] |
Filebeatは、モジュールをサポートしており、これによって機能を拡張できます。このチュートリアルでは、systemモジュールを使用します。これは、一般的なLinuxディストリビューションのシステムロギングサービスによって生成されたログを収集および解析します。Filebeatのsystemモジュールを有効にします:
|
1 |
sudo filebeat modules enable system |
次のFilebeatコマンドを実行すると、有効および無効になっているすべてのモジュールが一覧表示されます:
|
1 |
sudo filebeat modules list |
デフォルトでは、Filebeatはsyslogおよび認証ログのデフォルトパスを追跡するように設定されています。モジュールのパラメータは、「/etc/filebeat/modules.d/system.yml」設定ファイルで確認できます。
次のステップは、インデックステンプレートをElasticsearchにロードすることです。Elasticsearchインデックスは、同様の特徴を共有するドキュメントのコレクションを表します。各インデックスには名前があります。インデックス内でさまざまな操作を実行する際には、その名前が必要になります。インデックステンプレートは、新しいインデックスが生成されるたびに自動的に適用されます。次に、テンプレートをロードします:
|
1 |
sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]' |
Filebeatには、デフォルトでKibana用のサンプルダッシュボードが含まれています。これにより、KibanaでFilebeatのデータを可視化できます。ただし、ダッシュボードを使用する前に、インデックスパターンを作成し、ダッシュボードをKibanaにロードする必要があります。ダッシュボードのロード中、Filebeatはバージョン情報を取得するためにElasticsearchに接続します。Logstashが有効な状態でダッシュボードをロードするには、Logstash出力を無効にし、Elasticsearch出力を有効にする必要があります。次のコマンドを実行します:
|
1 |
sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601 |
最後に、Filebeatを起動します:
|
1 2 |
sudo systemctl start filebeat sudo systemctl enable filebeat |
これで、Elastic Stackの設定をテストする準備が整いました。正しく設定されていれば、出力は次のようになります:
|
1 |
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty' |
出力のトータルヒット数(total hits)が0と報告された場合、Elasticsearchは検索したインデックスの下にログをロードしていません。これは設定にエラーがあったことを示しています。出力が期待通りであれば、Elastic Stackの設定は正常に完了しています。
Kibanaダッシュボードの概要
それでは、すでにインストールしたKibanaのWebインターフェースを確認してみましょう。まず、Kibanaダッシュボードを開きます。これは、Elastic StackサーバーのFQDNまたはパブリックIPアドレスにあるはずです:
|
1 |
http://<server_ip>:5601 |
以前に生成したログイン資格情報を入力します。ログインすると、ダッシュボードは次のようになります:
左のナビゲーションバーから「Discover」を選択します。次に、「filebeat-*」パターンを選択します。過去15分間に収集されたすべてのログが表示されます。ログの検索や閲覧、ダッシュボードのカスタマイズが可能です。
左のナビゲーションバーから Dashboard >> Filebeat System に移動します。ここでは、Filebeatのシステムモジュールからのすべてのサンプルダッシュボードが利用可能です。
次の例では、syslogメッセージに基づくさまざまな統計の詳細を示しています。
また、どのユーザーがsudoを使用してコマンドを実行したかを報告することもできます。
最後に、Kibanaではグラフ作成やフィルタリングなど、他の多くの機能を探索する機会が提供されていますので、自由に探索してみてください。
おわりに
Elastic Stackは、システムログを分析するための強力なソリューションです。任意のログやインデックス付きデータを、Beatsを使用してLogstashに送信することは可能ですが、Logstashフィルターを通じてパースおよび構造化することで、より有用になるという点に留意してください。
快適なコンピューティングを!









コメント
コメントはまだありません。最初のコメントを投稿しましょう。