前書き

このチュートリアルでは、Ubuntu 14.04、つまりElasticsearch 1.7.3、Logstash 1.5.4、およびKibana 4.1.1へのElasticsearch ELKスタックのインストールについて説明します。 また、一元化された場所でシステムのsyslogを収集して視覚化するように構成する方法も示します。 Logstashは、将来の使用に備えてログを収集、解析、保存するためのオープンソースツールです。 Kibanaは、Logstashがインデックス付けしたログを検索および表示するために使用できるWebインターフェイスです。 これらのツールは両方ともElasticsearchに基づいています。

一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に便利です。1つの場所ですべてのログを検索できるからです。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるため便利です。

Logstashを使用してすべてのタイプのログを収集することは可能ですが、このチュートリアルの範囲をsyslog収集に限定します。

私たちの目標

チュートリアルの目的は、Logstashをセットアップして複数のサーバーのsyslogを収集し、収集されたログを視覚化するためにKibanaをセットアップすることです。

Logstash / Kibanaセットアップには、4つの主要コンポーネントがあります。

  • * Logstash *:受信ログを処理するLogstashのサーバーコンポーネント

  • * Elasticsearch *:すべてのログを保存します

  • * Kibana *:ログを検索および視覚化するためのWebインターフェイス。Nginxを介してプロキシされます。

  • * Logstash Forwarder *:Logstashにログを送信するサーバーにインストールされ、Logstash ForwarderはLogstashと通信するために_lumberjack_ネットワークプロトコルを利用するログ転送エージェントとして機能します

画像:https://assets.digitalocean.com/articles/elk/elk-infrastructure-logstashforwarder.png [ELKインフラストラクチャ]

最初の3つのコンポーネントを単一のサーバーにインストールします。これを* Logstashサーバー*と呼びます。 Logstash Forwarderは、ログを収集するすべてのクライアントサーバーにインストールされます。これを総称して*クライアントサーバー*と呼びます。

前提条件

このチュートリアルを完了するには、Ubuntu 14.04 VPSへのルートアクセスが必要です。 これを設定する手順は、こちら(手順3および4)で確認できます:https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Ubuntu 14.04での初期サーバーセットアップ]。

代わりにCentOSを使用する場合は、次のチュートリアルをご覧ください:https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-centos-7 [ CentOS 7にELKをインストールする方法]。

Logstashサーバーが必要とするCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Logstashサーバーに次の仕様のVPSを使用します。

  • OS:Ubuntu 14.04

  • RAM:4GB

  • CPU:2

Logstashサーバーに加えて、ログを収集する他のサーバーがいくつか必要になります。

Logstashサーバーのセットアップを始めましょう!

Java 8をインストールする

ElasticsearchとLogstashにはJavaが必要なので、今すぐインストールします。 Elasticsearchが推奨しているので、Oracle Java 8の最新バージョンをインストールします。 ただし、そのルートに進むことにした場合、OpenJDKで正常に動作するはずです。

aptにOracle Java PPAを追加します。

sudo add-apt-repository -y ppa:webupd8team/java

aptパッケージデータベースを更新します。

sudo apt-get update

次のコマンドを使用して、Oracle Java 8の最新の安定バージョンをインストールします(ポップアップ表示されるライセンス契約に同意します)。

sudo apt-get -y install oracle-java8-installer

Java 8がインストールされたので、ElasticSearchをインストールしましょう。

Elasticsearchをインストールする

Elasticsearchは、Elasticのパッケージソースリストを追加することにより、パッケージマネージャーと共にインストールできます。

次のコマンドを実行して、Elasticsearch GPG公開キーをaptにインポートします。

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

プロンプトがそこにぶら下がっている場合は、おそらくユーザーのパスワードを待っています( `+ sudo +`コマンドを許可するため)。 その場合は、パスワードを入力してください。

Elasticsearchソースリストを作成します。

echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list

aptパッケージデータベースを更新します。

sudo apt-get update

次のコマンドでElasticsearchをインストールします。

sudo apt-get -y install elasticsearch

Elasticsearchがインストールされました。 設定を編集しましょう:

sudo vi /etc/elasticsearch/elasticsearch.yml

Elasticsearchインスタンス(ポート9200)への外部アクセスを制限すると、HTTP APIを介して部外者がデータを読み取ったり、Elasticsearchクラスターをシャットダウンしたりできなくなります。 `+ network.host +`を指定する行を見つけてコメントを外し、その値を「localhost」に置き換えて、次のようにします。

elasticsearch.ymlの抜粋(更新)

network.host: localhost

保存して `+ elasticsearch.yml +`を終了します。

次に、Elasticsearchを開始します。

sudo service elasticsearch restart

次に、次のコマンドを実行して、起動時にElasticsearchを開始します。

sudo update-rc.d elasticsearch defaults 95 10

Elasticsearchが実行されたら、Kibanaをインストールしましょう。

Kibanaをインストールする

Kibanaは、Elasticのパッケージソースリストを追加することにより、パッケージマネージャーでインストールできます。

Kibanaソースリストを作成します。

echo 'deb http://packages.elastic.co/kibana/4.1/debian stable main' | sudo tee /etc/apt/sources.list.d/kibana.list

aptパッケージデータベースを更新します。

sudo apt-get update

次のコマンドでKibanaをインストールします。

sudo apt-get -y install kibana

Kibanaがインストールされました。

Kibana構成ファイルを編集用に開きます。

sudo vi /opt/kibana/config/kibana.yml

Kibana構成ファイルで、「+ host +」を指定する行を見つけ、IPアドレス(デフォルトでは「0.0.0.0」)を「localhost」に置き換えます。

kibana.ymlの抜粋(更新)

host: "localhost"

保存して終了。 この設定により、Kibanaはローカルホストのみがアクセスできるようになります。 同じサーバーにNginxリバースプロキシをインストールして外部アクセスを許可するため、これは問題ありません。

次に、Kibanaサービスを有効にして開始します。

sudo update-rc.d kibana defaults 96 9
sudo service kibana start

Kibana Webインターフェイスを使用する前に、リバースプロキシを設定する必要があります。 それでは、Nginxを使用してみましょう。

Nginxをインストールする

「+ localhost +」でリッスンするようにKibanaを設定したため、リバースプロキシを設定して外部アクセスを許可する必要があります。 この目的のためにNginxを使用します。

*注意:*使用したいNginxインスタンスが既にある場合は、代わりに使用してください。 Nginxサーバーから到達できるようにKibanaを設定してください(おそらく、+ / opt / kibana / config / kibana.yml + + host + `の値をKibanaサーバーのプライベートIPアドレスに変更するか、ホスト名)。 また、SSL / TLSを有効にすることをお勧めします。

aptを使用してNginxとApache2-utilsをインストールします。

sudo apt-get install nginx apache2-utils

htpasswdを使用して、Kibana Webインターフェイスにアクセスできる「kibanaadmin」と呼ばれる管理ユーザー(別の名前を使用する必要があります)を作成します。

sudo htpasswd -c /etc/nginx/htpasswd.users

プロンプトでパスワードを入力します。 Kibana Webインターフェースにアクセスするために必要になるため、このログインを忘れないでください。

ここで、お気に入りのエディターでNginxのデフォルトサーバーブロックを開きます。 viを使用します。

sudo vi /etc/nginx/sites-available/default

ファイルの内容を削除し、次のコードブロックをファイルに貼り付けます。 サーバーの名前に合わせて `+ server_name +`を更新してください:

/ etc / nginx / sites-available / default

server {
   listen 80;

   server_name ;

   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;
   }
}

保存して終了。 これにより、サーバーのHTTPトラフィックを `+ localhost:5601 `でリッスンしているKibanaアプリケーションに転送するようにNginxが設定されます。 また、Nginxは以前に作成した ` htpasswd.users +`ファイルを使用し、基本認証を要求します。

Nginxを再起動して、変更を有効にします。

sudo service nginx restart

Kibanaは、FQDNまたはLogstashサーバーのパブリックIPアドレスを介してアクセス可能になりました。 http:// logstash%5C_server%5C_public%5C_ip / [http:// logstash \ _server \ _public \ _ip /]。 Webブラウザで「kibanaadmin」の資格情報を入力すると、インデックスパターンを設定するよう求めるKibanaのようこそページが表示されます。 他のすべてのコンポーネントをインストールした後、後で戻りましょう。

Logstashをインストールする

LogstashパッケージはElasticsearchと同じリポジトリから入手でき、その公開キーは既にインストールされているため、Logstashソースリストを作成しましょう。

echo 'deb http://packages.elasticsearch.org/logstash/1.5/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list

aptパッケージデータベースを更新します。

sudo apt-get update

次のコマンドでLogstashをインストールします。

sudo apt-get install logstash

Logstashはインストールされていますが、まだ構成されていません。

SSL証明書を生成する

Logstash Forwarderを使用してサーバーからLogstashサーバーにログを送信するため、SSL証明書とキーペアを作成する必要があります。 Logstash Forwarderは、証明書を使用してLogstashサーバーのIDを確認します。 次のコマンドを使用して、証明書と秘密キーを保存するディレクトリを作成します。

sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private

これで、SSL証明書を生成するための2つのオプションがあります。 クライアントサーバーがLogstashサーバーのIPアドレスを解決できるDNSセットアップがある場合は、*オプション2 *を使用します。 それ以外の場合は、*オプション1 *でIPアドレスを使用できます。

オプション1:IPアドレス

LogstashサーバーのIPアドレスを解決するためにログを収集するサーバーを許可するDNSセットアップがない場合は、LogstashサーバーのプライベートIPアドレスを `+ subjectAltName +`に追加する必要があります生成しようとしているSSL証明書の(SAN)フィールド。 これを行うには、OpenSSL構成ファイルを開きます。

sudo vi /etc/ssl/openssl.cnf

ファイル内の `+ [v3_ca] +`セクションを見つけて、その下に次の行を追加します(LogstashサーバーのプライベートIPアドレスに置き換えてください):

openssl.cnfの抜粋(更新)

subjectAltName = IP:

保存して終了。

次のコマンドを使用して、適切な場所(/ etc / pki / tls /)にSSL証明書と秘密鍵を生成します。

cd /etc/pki/tls
sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

_logstash-forwarder.crt_ファイルは、Logstashにログを送信するすべてのサーバーにコピーされますが、それは少し後で行います。 Logstashの構成を完了しましょう。 このオプションを使用した場合は、オプション2をスキップして、* Logstashの構成*に進みます。

オプション2:FQDN(DNS)

プライベートネットワーキングでDNSをセットアップしている場合、LogstashサーバーのプライベートIPアドレスを含むAレコードを作成する必要があります。このドメイン名は次のコマンドで使用され、SSL証明書を生成します。 または、サーバーのパブリックIPアドレスを指すレコードを使用できます。 サーバー(ログを収集するサーバー)がドメイン名をLogstashサーバーに解決できることを確認してください。

次のコマンドを使用して、適切な場所(/ etc / pki / tls /…)でSSL証明書と秘密キーを生成します(LogstashサーバーのFQDNに置き換えます)。

cd /etc/pki/tls; sudo openssl req -subj '/CN=/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

_logstash-forwarder.crt_ファイルは、Logstashにログを送信するすべてのサーバーにコピーされますが、それは少し後で行います。 Logstashの構成を完了しましょう。

Logstashを構成する

Logstash構成ファイルはJSON形式で、/ etc / logstash / conf.dにあります。 構成は、入力、フィルター、および出力の3つのセクションで構成されています。

「+ 01-lumberjack-input.conf +」という設定ファイルを作成し、「lumberjack」入力(Logstash Forwarderが使用するプロトコル)を設定しましょう。

sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

次の_input_設定を挿入します。

01-lumberjack-input.conf

input {
 lumberjack {
   port => 5043
   type => "logs"
   ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
   ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
 }
}

保存して終了します。 これは、TCPポート「5043」でリッスンする「+ lumberjack +」入力を指定し、前に作成したSSL証明書と秘密鍵を使用します。

次に、「+ 10-syslog.conf +」という設定ファイルを作成します。ここで、syslogメッセージ用のフィルターを追加します。

sudo vi /etc/logstash/conf.d/10-syslog.conf

次のsyslog _filter_構成を挿入します。

10-syslog.conf

filter {
 if [type] == "syslog" {
   grok {
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
     add_field => [ "received_at", "%{@timestamp}" ]
     add_field => [ "received_from", "%{host}" ]
   }
   syslog_pri { }
   date {
     match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
   }
 }
}

保存して終了します。 このフィルターは、「syslog」タイプ(Logstash Forwarderによる)としてラベル付けされたログを探し、「grok」を使用して着信syslogログを解析し、構造化およびクエリ可能にします。

最後に、 `+ 30-lumberjack-output.conf +`という設定ファイルを作成します:

sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf

次の_output_設定を挿入します。

30-syslog.conf

output {
 elasticsearch { host => localhost }
 stdout { codec => rubydebug }
}

保存して終了。 この出力は、基本的に、ログをElasticsearchに保存するようにLogstashを構成します。

この構成では、Logstashはフィルターに一致しないログも受け入れますが、データは構造化されません(例: フィルタリングされていないNginxまたはApacheログは、HTTP応答コード、ソースIPアドレス、提供されたファイルなどでメッセージを分類するのではなく、フラットメッセージとして表示されます。

Logstash Forwarder入力を使用する他のアプリケーション用のフィルターを追加する場合は、入力と出力の構成(つまり、 01-と30-の間)。

Logstashを再起動して、構成の変更を有効にします。

sudo service logstash restart

Logstashサーバーの準備ができたので、Logstash Forwarderのセットアップに移りましょう。

Logstash Forwarderのセットアップ(クライアントサーバーの追加)

Logstashサーバーにログを送信するUbuntuまたはDebianサーバーごとにこれらの手順を実行します。 Logstash ForwarderをRed HatベースのLinuxディストリビューションにインストールする手順(例: RHEL、CentOSなど)、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-centos-7#set-upを参照してください-logstash-forwarder-(add-client-servers)[このチュートリアルのCentOSバリエーションのLogstash Forwarderセクションのビルドとパッケージ化]。

SSL証明書とLogstash Forwarderパッケージのコピー

  • Logstash Server で、SSL証明書を Client Server *にコピーします(クライアントサーバーのアドレスと独自のログインを置き換えます)。

scp /etc/pki/tls/certs/logstash-forwarder.crt @:/tmp

ログインの資格情報を提供した後、証明書のコピーが成功したことを確認します。 クライアントサーバーとLogstashサーバー間の通信に必要です。

Logstash Forwarderパッケージをインストールする

*クライアントサーバー*で、Logstash Forwarderソースリストを作成します。

echo 'deb http://packages.elastic.co/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

また、このコマンドでインストールできるElasticsearchと同じGPGキーを使用します。

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

次に、Logstash Forwarderパッケージをインストールします。

sudo apt-get update
sudo apt-get install logstash-forwarder

注意: 32ビットリリースのUbuntuを使用していて、「パッケージlogstash-forwarderが見つかりません」というエラーが表示される場合は、Logstash Forwarderを手動でインストールする必要があります。

LogstashサーバーのSSL証明書を適切な場所(/ etc / pki / tls / certs)にコピーします。

sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

Logstash Forwarderを構成する

*クライアントサーバー*で、JSON形式のLogstash Forwarder構成ファイルを作成および編集します。

sudo vi /etc/logstash-forwarder.conf

「+ network 」セクションの下で、次の行をファイルに追加し、Logstashサーバーのプライベートアドレスを「 logstash_server_private_address +」に置き換えます。

logstash-forwarder.confの抜粋1/2

   "servers": [ ":5043" ],
   "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
   "timeout": 15

`+ files +`セクション(角括弧の間)で、次の行を追加します。

logstash-forwarder.confの抜粋2/2

   {
     "paths": [
       "/var/log/syslog",
       "/var/log/auth.log"
      ],
     "fields": { "type": "syslog" }
   }

保存して終了します。 これにより、Logstash Forwarderがポート5043(以前に入力を指定したポート)でLogstashサーバーに接続するように構成され、以前に作成したSSL証明書が使用されます。 paths_セクションは、送信するログファイルを指定し(ここではsyslogとauth.logを指定します)、 type_セクションはこれらのログのタイプが「syslog *(フィルターが検索するタイプ)」であることを指定します。

これは、ポート5043でLogstashにLogstash Forwarderを他のログファイルに設定するために、さらにファイル/タイプを追加する場所であることに注意してください。

Logstash Forwarderを再起動して、変更を適切な場所に配置します。

sudo service logstash-forwarder restart

Logstash Forwarderはsyslogとauth.logをLogstashサーバーに送信しています! ログを収集する他のすべてのサーバーについて、このセクションを繰り返します。

Kibanaに接続

ログを収集するすべてのサーバーでLogstash Forwarderのセットアップが完了したら、先ほどインストールしたWebインターフェースであるKibanaを見てみましょう。

Webブラウザーで、LogstashサーバーのFQDNまたはパブリックIPアドレスに移動します。 「kibanaadmin」資格情報を入力すると、インデックスパターンを構成するように求めるページが表示されます。

image:https://assets.digitalocean.com/articles/elk/1-select-index.gif [インデックスの作成]

先に進み、ドロップダウンメニューから* @ timestamp *を選択し、[作成]ボタンをクリックして最初のインデックスを作成します。

次に、上部ナビゲーションバーの[検出]リンクをクリックします。 デフォルトでは、過去15分間のすべてのログデータが表示されます。 以下のログメッセージとともに、ログイベントのヒストグラムが表示されます。

image:https://assets.digitalocean.com/articles/elk/2-discover.png [ページを発見]

クライアントサーバーからsyslogを収集しているだけなので、現時点ではそれほど多くはありません。 ここで、ログを検索および参照できます。 ダッシュボードをカスタマイズすることもできます。

次のことを試してください。

  • 「ルート」を検索して、誰かがルートとしてサーバーにログインしようとしているかどうかを確認します

  • 特定のホスト名を検索( `+ host:” “+`を検索)

  • ヒストグラム上の領域を選択するか、上のメニューから時間枠を変更します

  • ヒストグラムの下のメッセージをクリックして、データがどのようにフィルタリングされているかを確認します

Kibanaには、グラフ作成やフィルタリングなど、他にも多くの機能がありますので、お気軽にご確認ください!

結論

syslogがElasticsearchとLogstashによって一元化され、Kibanaでそれらを視覚化できるようになったので、重要なログをすべて一元化することから始めましょう。 Logstashにはほとんどすべての種類のログを送信できますが、データはgrokで解析および構造化されるとさらに便利になります。

新しいELKスタックを改善するには、Logstashを使用して他のログを収集およびフィルタリングし、Kibanaダッシュボードを作成する必要があります。 これらのトピックは、このシリーズの2番目と3番目のチュートリアルで説明されています。 また、セットアップに問題がある場合は、https://www.digitalocean.com/community/tutorials/how-to-troubleshoot-common-elk-stack-issues [ELKスタックの一般的な問題のトラブルシューティング方法]チュートリアルに従ってください。 。