ウェブサイト検索

Ubuntu 16.04にElasticsearch、Logstash、Kibana(Elastic Stack)をインストールする方法


Ubuntu 16.04を使用していませんか?別のバージョンやディストリビューションを選択してください。

紹介

Elastic Stack — 以前はELK Stackとして知られていた — は、Elasticによって制作されたオープンソースソフトウェアのコレクションで、あらゆるソースから生成されたログを検索、分析、視覚化することを可能にする、集中ログ管理として知られる実践です。集中ログ管理は、サーバーやアプリケーションに問題を特定しようとする際に非常に便利で、すべてのログを1つの場所から検索できるためです。また、特定の時間枠内におけるログを相関させることで、複数のサーバーにまたがる問題を特定することも可能なため、有用です。

Elastic Stackには4つの主要なコンポーネントがあります。

  • Elasticsearch:収集したすべてのデータを保存する分散型のRESTful検索エンジンです。
  • Logstash: Elastic Stackのデータ処理コンポーネントで、受信データをElasticsearchに送信します。
  • Kibana: ログを検索し可視化するためのウェブインターフェースです。
  • ビート: 数百台または数千台のマシンからLogstashまたはElasticsearchにデータを送信できる、軽量で単目的のデータシッパーです。

このチュートリアルでは、Ubuntu 16.04サーバーにElastic Stackをインストールします。Filebeatを含むElastic Stackのすべてのコンポーネントをインストールする方法を学びます。Filebeatはログやファイルを転送し集中化するために使用されるBeatです。そして、それらを設定してシステムログを収集し可視化します。さらに、Kibanaは通常localhostでのみ利用可能なため、Nginxを使用してプロキシを設定し、ウェブブラウザからアクセスできるようにします。これらすべてのコンポーネントを単一のサーバーにインストールし、それを私たちのElastic Stackサーバーと呼びます。

注意: Elastic Stackをインストールする際は、スタック全体で同じバージョンを使用する必要があります。本チュートリアルでは、執筆時点での最新バージョンであるElasticsearch 6.5.1、Kibana 6.5.1、Logstash 6.5.1、およびFilebeat 6.5.1をインストールします。

前提条件

このチュートリアルを完了するには、以下が必要です:

  • Ubuntu 16.04の初期サーバー設定ガイドに従って設定されたUbuntu 16.04サーバーで、sudo権限を持つ非rootユーザーとufwで設定されたファイアウォールを含みます。Elastic Stackサーバーに必要なCPU、RAM、ストレージの量は、収集するログの量に依存します。このチュートリアルでは、以下の仕様を持つVPSをElastic Stackサーバーとして使用します:

    • OS: Ubuntu 16.04
    • RAM: 4GB
    • CPU: 2
  • ElasticsearchおよびLogstashに必要なJava 8がサーバーにインストールされていることを確認してください。これをインストールするには、私たちのガイドの「Ubuntu 16.04にJava 8をインストールする」セクションを参考にしてください。

  • あなたのサーバーにNginxがインストールされており、後でこのガイドでKibanaのリバースプロキシとして設定します。このセットアップについては、Ubuntu 16.04にNginxをインストールする方法に関するガイドに従ってください。

さらに、Elastic Stackはサーバーに関する貴重な情報にアクセスするために使用されるため、不正なユーザーにアクセスされないようにサーバーを安全に保つことが重要です。そのために、TLS/SSL証明書をインストールすることをお勧めします。これは任意ですが、強く推奨されます。

しかし、このガイドの過程で最終的にNginxサーバーブロックに変更を加えるため、Ubuntu 16.04のLet’s Encryptガイドはこのチュートリアルの第2ステップの終わりに実施する方が合理的でしょう。それを考慮して、サーバーにLet’s Encryptを設定する予定がある場合は、その前に以下の準備が必要です:

  • 完全修飾ドメイン名 (FQDN)。このチュートリアルでは、example.comを通じて説明します。Namecheapでドメイン名を購入するか、Freenomで無料のものを手に入れるか、お好きなドメインレジストラを使用できます。

  • サーバー用に設定された以下の両方のDNSレコード。これらを追加する方法については、DigitalOcean DNSの紹介を参照してください。

    • example.com があなたのサーバーの公開IPアドレスを指すAレコード。
    • www.example.comがあなたのサーバーのパブリックIPアドレスを指しているAレコード。

ステップ1 — Elasticsearchのインストールと設定

Elastic Stackのコンポーネントは、Ubuntuのデフォルトのパッケージリポジトリにはありません。しかし、Elasticのパッケージソースリストを追加することで、APTを使ってインストールすることができます。

Elastic Stackのすべてのパッケージは、システムをパッケージの偽造から保護するためにElasticsearchの署名キーで署名されています。キーを使用して認証されたパッケージは、パッケージマネージャーによって信頼されると見なされます。このステップでは、Elasticsearchの公開GPGキーをインポートし、ElasticsearchをインストールするためにElasticパッケージのソースリストを追加します。

まず、以下のコマンドを実行してElasticsearchの公開GPGキーをAPTにインポートします:

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

次に、APTが新しいソースを探すためのsources.list.dディレクトリにElasticソースリストを追加します:

  1. echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

次に、APTが新しいElasticソースを読み取るようにパッケージリストを更新してください:

  1. sudo apt-get update

次に、このコマンドでElasticsearchをインストールします:

  1. sudo apt-get install elasticsearch

Elasticsearchのインストールが完了したら、お好みのテキストエディタを使用してElasticsearchのメイン設定ファイルであるelasticsearch.ymlを編集します。ここではnanoを使用します:

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

注意: Elasticsearchの設定ファイルはYAML形式であるため、インデントが非常に重要です!このファイルを編集する際には、余分なスペースを追加しないようにしてください。

Elasticsearchは、ポート9200でどこからでもトラフィックを待ち受けます。外部からのアクセスを制限して、データを読み取ったり、REST APIを通じてElasticsearchクラスタをシャットダウンしたりするのを防ぐ必要があります。network.hostを指定する行を見つけて、そのコメントを外し、値をlocalhostに置き換えて、次のようにします:

. . .
network.host: localhost
. . .

エディタを終了するには、elasticsearch.ymlを保存して閉じるために、CTRL+Xを押し、次にYを押してからENTERを押します(nanoを使用している場合)。その後、systemctlでElasticsearchサービスを起動します。

  1. sudo systemctl start elasticsearch

次に、サーバーが起動するたびにElasticsearchを起動できるように、以下のコマンドを実行してください:

  1. sudo systemctl enable elasticsearch

Elasticsearchサービスが実行中かどうかを確認するには、HTTPリクエストを送信します:

  1. curl -X GET "localhost:9200"

あなたのローカルノードに関する基本情報を示すレスポンスが表示されます。その内容は次のようになります:

{
  "name" : "DX2KuVz",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Mscq8fVcR5-xgxFB3l35lg",
  "version" : {
    "number" : "6.5.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "816e6f6",
    "build_date" : "2018-11-09T18:58:36.352602Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Elasticsearchが稼働しているので、次のElastic StackのコンポーネントであるKibanaをインストールしましょう。

ステップ2 — Kibanaダッシュボードのインストールと構成

公式ドキュメントによると、KibanaはElasticsearchをインストールした後にのみインストールするべきです。この順番でインストールすることで、各製品が依存するコンポーネントが正しく配置されることが保証されます。

前のステップでElasticパッケージソースを追加したので、APTを使用してElastic Stackの残りのコンポーネントをインストールするだけで済みます:

  1. sudo apt-get install kibana

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

  1. sudo systemctl enable kibana
  2. sudo systemctl start kibana

Kibanaはlocalhostのみでリッスンするように設定されているため、外部アクセスを可能にするためにリバースプロキシを設定する必要があります。この目的のためにNginxを使用しますが、既にサーバーにインストールされているはずです。

まず、opensslコマンドを使用して、KibanaのWebインターフェースにアクセスするために使用する管理者Kibanaユーザーを作成します。このアカウントには例としてkibanaadminという名前を付けますが、より安全性を高めるために、推測されにくい非標準の名前を選ぶことをお勧めします。

次のコマンドは、管理用のKibanaユーザーとパスワードを作成し、それらをhtpasswd.usersファイルに保存します。あなたはNginxをこのユーザー名とパスワードを要求するように設定し、今しばらくこのファイルを読み取ることになります:

  1. echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

プロンプトでパスワードを入力して確認してください。このログイン情報を記憶するかメモしてください。Kibanaウェブインターフェースにアクセスするために必要になります。

次に、Nginxサーバーブロックファイルを作成します。例として、このファイルをexample.comと呼びますが、あなたのファイルにはより説明的な名前をつけると良いかもしれません。たとえば、このサーバーにFQDNとDNSレコードが設定されている場合、このファイルにFQDNの名前を付けることができます:

  1. sudo nano /etc/nginx/sites-available/example.com

次のコードブロックをファイルに追加し、example.comをあなたのサーバーのFQDNまたはパブリックIPアドレスに合わせて更新してください。このコードは、Nginxを設定してあなたのサーバーのHTTPトラフィックをKibanaアプリケーションに向けるものであり、Kibanaはlocalhost:5601でリスニングしています。さらに、Nginxを設定してhtpasswd.usersファイルを読み込み、基本認証を要求します。

もし私たちのチュートリアル「Ubuntu 16.04でのNginxサーバーブロック(バーチャルホスト)を設定する方法」に従った場合、このサーバーブロックファイルをすでに作成し、いくつかの内容で埋めているかもしれません。その場合、以下の内容を追加する前に、ファイル内の既存のすべての内容を削除してください。

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ディレクトリへのシンボリックリンクを作成して、新しい構成を有効にします。もし、Nginxの前提条件で同じ名前のサーバーブロックファイルをすでに作成している場合は、このコマンドを実行する必要はありません。

  1. sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

次に、構成に文法エラーがないか確認してください:

  1. sudo nginx -t

出力にエラーが報告された場合は、設定ファイルに追加した内容が正しく追加されたかを再確認してください。出力に構文は正常ですと表示されたら、Nginxサービスを再起動してください:

  1. sudo systemctl restart nginx

初期のサーバー設定ガイドに従った場合、UFWファイアウォールが有効になっているはずです。Nginxへの接続を許可するために、ルールを次のように調整できます。

  1. sudo ufw allow 'Nginx Full'

注意: もしあなたが前提条件のNginxチュートリアルに従った場合、ファイアウォールを通じてNginx HTTPプロファイルを許可するUFWルールを作成したかもしれません。Nginx Fullプロファイルはファイアウォールを通じてHTTPおよびHTTPSの両方のトラフィックを許可するため、前提条件のチュートリアルで作成したルールを安全に削除できます。以下のコマンドを使用して行ってください:

  1. sudo ufw delete allow 'Nginx HTTP'

Kibanaは、あなたのFQDNまたはElastic StackサーバーのパブリックIPアドレスを介してアクセス可能です。以下のアドレスに移動し、求められたときにログイン認証情報を入力することで、Kibanaサーバーのステータスページを確認できます:

http://your_server_ip/status

このステータスページはサーバーのリソース使用状況に関する情報を表示し、インストールされているプラグインのリストを示します。

注意: 前提条件のセクションで述べたように、サーバーでSSL/TLSを有効にすることをお勧めします。このチュートリアルに従って、Ubuntu 16.04上のNginx用の無料SSL証明書を取得してください。SSL/TLS証明書を取得したら、戻ってきてこのチュートリアルを完了できます。

Kibanaのダッシュボードが設定されたので、次のコンポーネントであるLogstashをインストールしましょう。

ステップ3 — Logstashのインストールと設定

BeatsがElasticsearchデータベースに直接データを送信することは可能ですが、データを処理するためにLogstashを使用することをお勧めします。これにより、異なるソースからデータを収集し、それを共通の形式に変換し、別のデータベースにエクスポートすることができます。

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

  1. sudo apt-get install logstash

Logstashをインストールした後は、設定に進むことができます。Logstashの設定ファイルはJSON形式で書かれており、/etc/logstash/conf.dディレクトリにあります。設定を行う際、Logstashをパイプラインと考えると便利です。データが一方の端から入り、何らかの方法で処理され、最終的に宛先(この場合、宛先はElasticsearch)に出力されます。Logstashのパイプラインには、inputとoutputという2つの必須要素と、1つのオプション要素filterがあります。入力プラグインはソースからデータを取得し、フィルタープラグインがデータを処理し、出力プラグインがデータを宛先に書き込みます。

02-beats-input.confという設定ファイルを作成し、そこにFilebeatの入力設定を行います:

  1. sudo nano /etc/logstash/conf.d/02-beats-input.conf

次のinput構成を挿入してください。これはbeats入力を指定し、TCPポート5044でリッスンします。

input {
  beats {
    port => 5044
  }
}

ファイルを保存して閉じます。次に、10-syslog-filter.confという名前の設定ファイルを作成します。ここでは、システムログ、つまりsyslogsのフィルターを追加します。

  1. sudo nano /etc/logstash/conf.d/10-syslog-filter.conf

以下のsyslogフィルター構成を挿入してください。この例のシステムログ構成は、公式のElasticドキュメントから取得されました。このフィルターは、受信したシステムログをパースして構造化し、事前定義されたKibanaダッシュボードで使用できるようにするために使用されます。

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 nano /etc/logstash/conf.d/30-elasticsearch-output.conf

次のoutput設定を挿入してください。本質的に、この出力はLogstashがElasticsearchにBeatsデータを保存するように設定し、Elasticsearchはlocalhost:9200で実行されています。使用されるインデックスは、使用されたBeatの名前になります。このチュートリアルで使用されているBeatはFilebeatです。

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

ファイルを保存して閉じてください。

他のアプリケーションがFilebeat入力を使用する場合のフィルターを追加したい場合は、ファイル名が入力と出力の設定の間でソートされるように、ファイル名を2桁の数字(02から30の間)で始めることを確認してください。

このコマンドでLogstashの設定をテストしてください:

  1. sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

構文エラーがなければ、数秒後にあなたの出力にConfigruation OKと表示されます。これが出力に表示されない場合は、出力に表示されるエラーを確認し、それを修正するために設定を更新してください。

構成テストが成功した場合、構成変更を有効にするためにLogstashを起動して有効化してください。

  1. sudo systemctl start logstash
  2. sudo systemctl enable logstash

Logstashが正しく動作し、完全に構成されたので、Filebeatをインストールしましょう。

ステップ4 — Filebeatのインストールと設定

Elastic Stackは、さまざまなソースからデータを収集し、それをLogstashまたはElasticsearchに送信するために、Beatsと呼ばれるいくつかの軽量データシッパーを使用します。現在Elasticから提供されているBeatsは以下の通りです:

  • Filebeat: ログファイルを収集して送信します。
  • Metricbeat: あなたのシステムとサービスからメトリクスを収集します。
  • Packetbeat: ネットワークデータを収集し分析します。
  • Winlogbeat: Windowsイベントログを収集します。
  • Auditbeat: Linux監査フレームワークデータを収集し、ファイルの整合性を監視します。
  • ハートビート:アクティブプロービングでサービスの可用性を監視します。

このチュートリアルでは、Filebeatを使用してローカルログをElastic Stackに転送します。

APTを使用してFilebeatをインストールします:

  1. sudo apt-get install filebeat

次に、FilebeatをLogstashに接続するように設定します。ここでは、Filebeatに付属するサンプル設定ファイルを修正します。

Filebeatの設定ファイルを開いてください:

  1. sudo nano /etc/filebeat/filebeat.yml

注: Elasticsearchと同様に、Filebeatの設定ファイルはYAML形式です。つまり、適切なインデントが重要であるため、これらの指示に示されているスペースの数を必ず使用してください。

Filebeat は多数の出力をサポートしていますが、通常はイベントを直接 Elasticsearch に送信するか、追加の処理のために Logstash に送信します。このチュートリアルでは、Filebeat によって収集されたデータに対して追加の処理を実行するために Logstash を使用します。Filebeat は直接 Elasticsearch にデータを送信する必要がないため、その出力を無効にしましょう。そのために、output.elasticsearch セクションを見つけ、次の行の前に # を付けてコメントアウトしてください。

...
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]
...

次に、output.logstash セクションを設定します。output.logstash: および hosts: ["localhost:5044"] の行のコメントを外すために、# を削除します。これにより、Filebeat は Elastic Stack サーバーのポート 5044 で Logstash に接続するように構成されます。以前に Logstash 入力を指定したポートです:

. . .
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]
. . .

ファイルを保存して閉じてください。

Filebeatの機能は、Filebeatモジュールによって拡張できます。このチュートリアルでは、一般的なLinuxディストリビューションのシステムログサービスによって作成されたログを収集し解析するシステムモジュールを使用します。

それを有効にしましょう:

  1. sudo filebeat modules enable system

有効および無効なモジュールの一覧は、次のコマンドを実行することで確認できます:

  1. sudo filebeat modules list

次のようなリストが表示されます:

Enabled:
system

Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
suricata
traefik

デフォルトでは、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"]'
Loaded index template

Filebeatには、KibanaでFilebeatデータを視覚化できるサンプルのKibanaダッシュボードが同梱されています。ダッシュボードを使用する前に、インデックスパターンを作成し、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

このような出力が表示されます:

. . .
2018-11-19T21:29:45.239Z	INFO	elasticsearch/client.go:163	Elasticsearch url: http://localhost:9200
2018-11-19T21:29:45.240Z	INFO	[publisher]	pipeline/module.go:110	Beat name: elk-16-03
2018-11-19T21:29:45.241Z	INFO	elasticsearch/client.go:163	Elasticsearch url: http://localhost:9200
2018-11-19T21:29:45.248Z	INFO	elasticsearch/client.go:712	Connected to Elasticsearch version 6.5.0
2018-11-19T21:29:45.253Z	INFO	template/load.go:129	Template already exists and will not be overwritten.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2018-11-19T21:29:45.253Z	INFO	elasticsearch/client.go:163	Elasticsearch url: http://localhost:9200
2018-11-19T21:29:45.256Z	INFO	elasticsearch/client.go:712	Connected to Elasticsearch version 6.5.0
2018-11-19T21:29:45.256Z	INFO	kibana/client.go:118	Kibana url: http://localhost:5601
2018-11-19T21:30:15.404Z	INFO	instance/beat.go:741	Kibana dashboards successfully loaded.
Loaded dashboards
2018-11-19T21:30:15.404Z	INFO	elasticsearch/client.go:163	Elasticsearch url: http://localhost:9200
2018-11-19T21:30:15.408Z	INFO	elasticsearch/client.go:712	Connected to Elasticsearch version 6.5.0
2018-11-19T21:30:15.408Z	INFO	kibana/client.go:118	Kibana url: http://localhost:5601
2018-11-19T21:30:15.457Z	WARN	fileset/modules.go:388	X-Pack Machine Learning is not enabled
2018-11-19T21:30:15.505Z	WARN	fileset/modules.go:388	X-Pack Machine Learning is not enabled
Loaded machine learning job configurations

これでFilebeatを開始し、有効にすることができます:

  1. sudo systemctl start filebeat
  2. sudo systemctl enable filebeat

Elastic Stackを正しく設定していれば、Filebeatはsyslogおよび認証ログをLogstashに送信し、その後LogstashはそのデータをElasticsearchにロードします。

Elasticsearchが実際にこのデータを受信していることを確認するには、次のコマンドでFilebeatインデックスをクエリします:

  1. curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

このような出力が表示されます:

{
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1580,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "filebeat-6.5.0-2018.11.19",
        "_type" : "doc",
        "_id" : "HnDiLWcB5tvUruXKVbok",
        "_score" : 1.0,
        "_source" : {
          "input" : {
            "type" : "log"
          },
...

出力に合計ヒット数が0と表示される場合、Elasticsearchは検索したインデックスの下にログを読み込んでいないため、設定にエラーがないか確認する必要があります。期待される出力を受け取った場合は、次のステップに進み、Kibanaのダッシュボードのいくつかを移動する方法を見ていきます。

ステップ5 — Kibanaダッシュボードの探索

先ほどインストールしたウェブインターフェースであるKibanaを見てみましょう。

ウェブブラウザで、Elastic StackサーバーのFQDNまたはパブリックIPアドレスにアクセスします。ステップ2で定義したログイン資格情報を入力すると、Kibanaのホームページが表示されます:

左側のナビゲーションバーのDiscoverリンクをクリックします。Discoverページでは、事前定義されたfilebeat-*インデックスパターンを選択して、Filebeatデータを表示します。デフォルトでは、過去15分間のすべてのログデータが表示されます。ログイベントのヒストグラムと、下にいくつかのログメッセージが表示されます:

ここでは、ログを検索してブラウズしたり、ダッシュボードをカスタマイズしたりできます。ただし、この時点では、Elastic Stackサーバーからのsyslogしか収集していないため、あまり多くの情報はありません。

左側のパネルを使用してダッシュボードページに移動し、Filebeat Systemダッシュボードを検索します。そこに到達したら、Filebeatのsystemモジュールに付属するサンプルダッシュボードを検索できます。

例えば、syslog メッセージに基づいて詳細な統計を表示できます:

どのユーザーがsudoコマンドを使ったか、いつ使ったかを確認することもできます:

Kibanaには、グラフ作成やフィルタリングなどの多くの他の機能があるので、自由に探検してください。

結論

このチュートリアルでは、システムログを収集および分析するためにElastic Stackをインストールおよび構成する方法を学びました。Beatsを使用してLogstashにほぼすべての種類のログやインデックスデータを送信できることを覚えておいてください。ただし、データをLogstashフィルタで解析して構造化することで、データの有用性が高まり、Elasticsearchが簡単に読み取れる一貫した形式に変換されます。

関連記事: