人気の投稿

2021年8月21日土曜日

Metricbeat をインストールする

ここまで、インストール&アップグレードしかしていないので、Elastic Securityにとりかかる前に、beatを入れてElasticStackを体感しておく。 手っ取り早そうなMetricbeatを選択した


参考にしたページ

 

概要

  • Metricbeatは、オペレーティングシステムとサービスからメトリックを収集することにより、サーバーとサーバーがホストするサービスを監視するのに役立つ

 

やることの流れ

  1.  監視する各システムにMetricbeatをインストールする
  2. 収集するメトリックを指定する
  3. メトリックをElasticsearchに送信する
  4. Kibanaのメトリックデータを視覚化する

インストール方法

  • RPMパッケージやDEBパッケージ
  • YUMやAPT
  • Docker
  • K8s

 

インストールの手順

  • RPMパッケージをダウンロードしてインストールする
$ curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.14.0-x86_64.rpm
$ sudo rpm -vi metricbeat-7.14.0-x86_64.rpm

 

ElasticStackに接続する

  • /etc/metricbeat/metricbeat.yml に接続情報を設定する
    • MetricbeatがElasticsearchインストールを見つけることができるホストとポートを設定し、Metricbeatのセットアップを許可されているユーザーのユーザー名とパスワードを設定する
 output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "metricbeat_internal"
  password: "YOUR_PASSWORD"
    •  構築済みのKibanaダッシュボードを使用する場合は、Kibanaエンドポイントを構成する。KibanaがElasticsearchと同じホストで実行されている場合は、この手順をスキップする
 setup.kibana:
    host: "mykibanahost:5601"
    username: "my_kibana_user"  
    password: "{pwd}"

 

メトリクス収集モジュールを有効化して構成する

  • Metricbeatは、モジュールを使用してメトリックを収集する
  • 各モジュールは、RedisやMySQLなどの特定のサービスからデータを収集するための基本的なロジックを定義する
  • Metricbeatは、サンプルダッシュボードとデータの視覚化を備えたシステム監視ソリューションを迅速に実装および展開するために使用できる、事前に構築されたモジュールを提供する
  • システムモジュールを実行して、OSとサービスからメトリックを収集する
  • システムモジュールは、CPU使用率、メモリ、ファイルシステム、ディスクI/O、ネットワークI/O統計などのシステムレベルのメトリックと、システムで実行されているすべてのプロセスの上位の統計を収集する
    •  systemモジュールを有効化する
$ sudo metricbeat modules enable system
 
利用可能なモジュールリストを表示するには、以下のコマンドを実行する。
$ metricbeat modules list
追加のモジュールを有効にしない場合、Metricbeatはシステムメトリックのみを収集する
    • 初期環境をセットアップする
$ sudo metricbeat setup -e 
setupコマンドは、Kibanaダッシュボードをロードする。ダッシュボードがすでに設定されている場合は、このコマンドを省略する。 -eフラグはオプションで、syslogではなく標準エラーに出力を送信する。
    • Metricbeatを開始する
$ sudo service metricbeat start
Metricbeatが実行され、Elasticsearchへのシステムメトリックの送信が開始される



2021年8月15日日曜日

ElasticsearchとKibanaとLogstashを7.14.0にアップグレードする

7.13.0をインストールしてほったらかしにしてあったElasticsearchと、Kibana、Logstashをアップグレードする。

Elasticsearchの新しいバージョンにアップグレードするときは、ElasticStack内の各製品をアップグレードする必要がある。Kibanaは、Elasticsearchとバージョンを合わせる必要がある。BeatsとLogstash6.7は、Elasticsearch7.14.0と互換性があり、アップグレードのスケジュールを柔軟に設定できる。

マイナーバージョン間のアップグレードなので、Elasticsearchはローリングアップグレードできるのでサービはスの停止が不要。Kibanaはローリングアップグレードをサポートしていないので、複数のKibanaインスタンスを実行している場合は、アップグレードする前にすべてのインスタンスを停止する必要がある。

参考にしたページ

Elasticsearchのローリングアップグレード
  • ローリングアップグレードでは、Elasticsearchクラスターを一度に1ノードずつアップグレードできるため、アップグレードによってサービスが中断されない
  • アップグレードされたノードから古いバージョンを実行しているノードにシャードを複製できないため、アップグレードの期間を超えて同じクラスターでElasticsearchの複数のバージョンを実行することはサポートされていない
  • ローリングアップグレードは、マイナーバージョン間、5.6から6.8、6.8から7.14.0まででサポートされている
  • 6.7以前から7.14.0に直接アップグレードするには、クラスターを完全に再起動する必要がある
Elasticsearchのアップグレード
  • 単一ノードなので、Elasticsearchを停止して、新しいバージョンのRPMパッケージをインストールする。(すべてのファイルはオペレーティングシステムの適切な場所にインストールされ、Elasticsearchの設定ファイルは上書きされない)
$ sudo systemctl stop elasticsearch.service
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-x86_64.rpm
$wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-x86_64.rpm.sha512
$ shasum -a 512 -c elasticsearch-7.14.0-x86_64.rpm.sha512 
$ sudo rpm --upgrade elasticsearch-7.14.0-x86_64.rpm

インストールが終わると、以下のメッセージが表示された。 

Created elasticsearch keystore in /etc/elasticsearch/elasticsearch.keystore

[/usr/lib/tmpfiles.d/elasticsearch.conf:1] Line references path below legacy directory /var/run/, updating /var/run/elasticsearch → /run/elasticsearch; please update the tmpfiles.d/ drop-in file accordingly. 

言われたとおりに、/usr/lib/tmpfiles.d/elasticsearch.confを更新する。

  • Elasticsearchを起動する

$ sudo systemctl start elasticsearch.service

  • Elasticsearchの動作確認
$ curl -X GET "localhost:9200/?pretty"
{
  "name" : "hyakushiki",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "JOihVTGCTwarfpDON6J-Sw",
  "version" : {
    "number" : "7.14.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
    "build_date" : "2021-07-29T20:49:32.864135063Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Kibanaのアップグレード

  • 単一のインスタンスしか起動していないので、Kibanaを停止して、新しいバージョンのRPMパッケージをインストールする。
$ sudo systemctl stop kibana.service
$ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.14.0-x86_64.rpm
$ shasum -a 512 kibana-7.14.0-x86_64.rpm 
$ sudo rpm --upgrade kibana-7.14.0-x86_64.rpm
  • Kibanaを起動する

$ sudo systemctl start kibana.service

  • Kibanaの動作確認
Weブラウザで、Kibanaを実行しているマシンの5601番ポートへアクセスする。たとえば、http://localhost:5601またはhttp://HOSTNAME:5601、http://127.0.0.1:5601

 

Logstashのアップグレード

  • マイナーバージョン間のアップグレードは、新しいリリースをインストールしてLogstashを再起動するだけでできる。Logstashは通常、構成設定とエクスポートされたフィールドの下位互換性を維持する
  • RPMパッケージをダウンロードしてインストールする。
$ curl -L -0 https://artifacts.elastic.co/downloads/logstash/logstash-7.14.0-x86_64.rpm --output ./logstash-7.14.0-x86_64.rpm
$ sudo rpm -Uvh logstash-7.14.0-x86_64.rpm

  • 動作確認

$ sudo /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
Using bundled JDK: /usr/share/logstash/jdk
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:200: warning: constant Gem::ConfigMap is deprecated
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
[INFO ] 2021-08-15 21:29:11.492 [main] runner - Starting Logstash {"logstash.version"=>"7.14.0", "jruby.version"=>"jruby 9.2.19.0 (2.5.8) 2021-06-15 55810c552b OpenJDK 64-Bit Server VM 11.0.11+9 on 11.0.11+9 +indy +jit [linux-x86_64]"}
[WARN ] 2021-08-15 21:29:12.050 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified
[INFO ] 2021-08-15 21:29:13.922 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
[INFO ] 2021-08-15 21:29:14.590 [Converge PipelineAction::Create
] Reflections - Reflections took 106 ms to scan 1 urls, producing 120 keys and 417 values
[WARN ] 2021-08-15 21:29:15.507 [Converge PipelineAction::Create
] stdin - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[INFO ] 2021-08-15 21:29:16.034 [[main]-pipeline-manager] javapipeline - Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50,
"pipeline.max_inflight"=>250, "pipeline.sources"=>["config string"], :thread=>"#
"}
[INFO ] 2021-08-15 21:29:17.195 [[main]-pipeline-manager] javapipeline - Pipeline Java execution initialization time {"seconds"=>1.16}
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.jrubystdinchannel.StdinChannelLibrary$Reader (file:/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/jruby-stdin-channel-0.2.0-java/lib/jruby_stdin_channel/jruby_stdin_channel.jar) to field java.io.FilterInputStream.in
WARNING: Please consider reporting this to the maintainers of com.jrubystdinchannel.StdinChannelLibrary$Reader
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO ] 2021-08-15 21:29:18.316 [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[INFO ] 2021-08-15 21:29:18.407 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}

 Logstashを開始した後、コマンドプロンプトで hello world と入力する

 hello world

{
      "@version" => "1",
          "host" => "hyakushiki",
       "message" => "hello world",
    "@timestamp" => 2021-08-15T12:33:04.901Z
}

 ctrl+DでLogstashを終了する

[INFO ] 2021-08-15 21:34:34.304 [[main]-pipeline-manager] javapipeline - Pipeline terminated {"pipeline.id"=>"main"}
[INFO ] 2021-08-15 21:34:34.394 [Converge PipelineAction::Delete<main>] pipelinesregistry - Removed pipeline from registry successfully {:pipeline_id=>:main}
[INFO ] 2021-08-15 21:34:34.465 [LogStash::Runner] runner - Logstash shut down.

2021年8月14日土曜日

Limitless XDRへの興味が尽きないので、あらためて日曜大工を頑張る

ずいぶんとほったらかしにしてしまっていたけれど、Elastic 7.14.0でSIEMとエンドポイントセキュリティ機能を一元的に提供するLimitless XDRが無料で使用できると聞いて、興味津々なので心機一転頑張る。

まずは、機能について以下のページを読んで理解する。

2021年6月13日日曜日

Logstash のインストール

 Logstashをインストールした。

参考にしたページ

 

インストール方法

  • バイナリからの インストール
  • リポジトリからのインストール
  • Dockerコンテナを実行

 

 バイナリからのインストール

  • RPMパッケージをダウンロードしてインストールする。
  • Logstashの最新の安定バージョンは、Logstashのダウンロードページにある。

 $ curl -L -0 https://artifacts.elastic.co/downloads/logstash/logstash-7.13.1-x86_64.rpm

$ sudo rpm -ivh logstash-7.13.1-x86_64.rpm

Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:logstash-1:7.13.1-1              ################################# [100%]
Using bundled JDK: /usr/share/logstash/jdk
Using provided startup.options file: /etc/logstash/startup.options
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.32/lib/pleaserun/platform/base.rb:112: warning: constant ::Fixnum is deprecated
Successfully created system startup script for Logstash 

 動作確認

  •  -e オプションを使用してコマンドラインから直接構成を指定する。
  • コマンドラインで構成を指定すると、ファイルを編集しなくても、構成をすばやくテストできます。
  • 以下のパイプラインは、標準入力から入力を受け取り、その入力を構造化された形式で標準出力に移動します。

 $ sudo /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
[INFO ] 2021-06-13 22:10:03.495 [main] runner - Starting Logstash {"logstash.version"=>"7.13.1", "jruby.version"=>"jruby 9.2.16.0 (2.5.7) 2021-03-03 f82228dc32 OpenJDK 64-Bit Server VM 11.0.11+9 on 11.0.11+9 +indy +jit [linux-x86_64]"}
[WARN ] 2021-06-13 22:10:03.934 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified
[INFO ] 2021-06-13 22:10:05.518 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
[INFO ] 2021-06-13 22:10:05.958 [Converge PipelineAction::Create<main>] Reflections - Reflections took 57 ms to scan 1 urls, producing 24 keys and 48 values
[WARN ] 2021-06-13 22:10:06.852 [Converge PipelineAction::Create<main>] stdin - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[INFO ] 2021-06-13 22:10:07.301 [[main]-pipeline-manager] javapipeline - Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>250, "pipeline.sources"=>["config string"], :thread=>"#<Thread:0x3005506b run>"}
[INFO ] 2021-06-13 22:10:08.309 [[main]-pipeline-manager] javapipeline - Pipeline Java execution initialization time {"seconds"=>1.0}
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.jrubystdinchannel.StdinChannelLibrary$Reader (file:/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/jruby-stdin-channel-0.2.0-java/lib/jruby_stdin_channel/jruby_stdin_channel.jar) to field java.io.FilterInputStream.in
WARNING: Please consider reporting this to the maintainers of com.jrubystdinchannel.StdinChannelLibrary$Reader
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO ] 2021-06-13 22:10:09.472 [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[INFO ] 2021-06-13 22:10:09.631 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}

  • Logstashを開始した後、コマンドプロンプトで hello world と入力する

 hello world
{
       "message" => "hello world",
    "@timestamp" => 2021-06-13T13:05:47.606Z,
      "@version" => "1",
          "host" => "hostname"
}

  •  ctrl+DでLogstashを終了する

 [INFO ] 2021-06-13 22:16:58.342 [[main]-pipeline-manager] javapipeline - Pipeline terminated {"pipeline.id"=>"main"}
[INFO ] 2021-06-13 22:16:58.420 [Converge PipelineAction::Delete<main>] pipelinesregistry - Removed pipeline from registry successfully {:pipeline_id=>:main}
[INFO ] 2021-06-13 22:16:58.506 [LogStash::Runner] runner - Logstash shut down.

 

2021年6月6日日曜日

EncFS でデータを暗号化してみた

参考にしたページなど

 

EncFSの概要(man encfsより)

 EncFS は、暗号化されたデータを rootdir ディレクトリに保存し、暗号化されていないデータを mountPoint ディレクトリに表示する仮想暗号化ファイルシステムを作成します。 ユーザーは、ファイル名とファイル コンテンツの両方を (間接的に) 暗号化するために使用されるパスワードを提供する必要があります。

EncFS が指定された rootdir でサポートされているファイルシステムを見つけることができない場合、ユーザーは指定された場所に新しい暗号化ファイルシステムを作成するかどうかを尋ねられます。 オプションがユーザーに表示され、使用するアルゴリズムをある程度制御できます。 EncFS が成熟するにつれて、選択肢が増える可能性があります。

 

インストール

  • Ubuntu 20.04.2 LTSには、encfsがインストール済みだった。

$ apt info encfs
Package: encfs
Version: 1.9.5-1build2

(略)


使用例

  • 新しい暗号化ファイルシステムを作成する。 
  • 生の (暗号化された) データを "~/.crypt" に保存し、暗号化されていないデータを "~/crypt" で表示できるようにする。
  •  この例では、両方のディレクトリがホーム ディレクトリにあり、ファイルシステムを作成するかどうかをユーザーに尋ねる encfs の完全な出力を示している。
$ encfs ~/.crypt ~/crypt  
ディレクトリ "~/.crypt/" が存在しません。作成しますか? (y,N) y
ディレクトリ "~/crypt/" が存在しません。作成しますか? (y,N) y
新しい暗号化ボリュームを作成します。
Please choose from one of the following options:
enter "x" for expert configuration mode,
enter "p" for pre-configured paranoia mode,
anything else, or an empty line will select standard mode.
?> p

Paranoia configuration selected.

設定が完了しました。以下のプロパティのファイルシステムが
作成されます:
ファイルシステム暗号アルゴリズム: "ssl/aes", バージョン 3:0:2
Filename encoding: "nameio/block", version 4:0:2
鍵サイズ: 256 ビット
ブロックサイズ : 1024 バイト (8 バイト MAC ヘッダ含む)
Each file contains 8 byte header with unique IV data.
Filenames encoded using IV chaining mode.
File data IV is chained to filename IV.
File holes passed through to ciphertext.

-------------------------- 警告 --------------------------
The external initialization-vector chaining option has been
enabled.  This option disables the use of hard links on the
filesystem. Without hard links, some programs may not work.
The programs 'mutt' and 'procmail' are known to fail.  For
more information, please see the encfs mailing list.
If you would like to choose another configuration setting,
please press CTRL-C now to abort and start over.

Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.

新しい Encfs パスワード:  
Encfs パスワードの確認:

  • ファイルシステムがマウントされ、~/crypt に表示される。
  • そこにファイルが作成された場合、それらは ~/.crypt に暗号化された形式で表示される。
  • ファイルシステムをアンマウントするには、fusermount に -u (アンマウント) オプションを付けて使用する。
$ fusermount -u ~/crypt
 
注意事項
  • EncFS は真のファイルシステムではない。ファイルの実際の保管や保守は扱わない。単純にリクエストを変換 (必要に応じて暗号化または復号) し、リクエストをベースのホスト ファイル システムに渡す。従って、ホストファイルシステムの制限は EncFS によって継承される(またはさらに制限される可能性がある)。
  • そのような制限の 1 つが、ファイル名の長さ。 基になるファイルシステムでファイル名が N 文字に制限されている場合、EncFS は約 3*(N-2)/4 に制限する。例えば、ホスト ファイル システムが 255 文字に制限されている場合、EncFS は 189 文字のファイル名に制限される。これは、暗号化されたファイル名がプレーンテキストのファイル名よりも常に長いため。

 

ファイルシステムのオプション

  • EncFS に既存の EncFS ファイルシステムを含まないルートディレクトリが指定された場合、それを作成するオプションが提供される。 オプションは、ファイルシステムの作成時にのみ設定できることに注意する。 ファイルシステムのオプションをインプレースで変更することはサポートされていない。
  • ファイルシステムをアップグレードして新しい機能を使用する場合は、新しいファイルシステムを作成し、古いファイルシステムと新しいファイルシステムの両方を同時にマウントして、古いファイルシステムを新しいファイルシステムにコピーする必要がある。
  • システム上の現在の FUSE モジュールと互換性がある限り、異なるバージョンの encfs を含め、encfs の複数のインスタンスを同時に実行できる。
  • 2 つの事前構成設定 (「標準」および「パラノイア」) の選択肢が、エキスパート構成モードとともに提供される。
    • Standard mode uses the following settings:
      Cipher: AES
      Key Size: 192 bits
      PBKDF2 with 1/2 second runtime, 160 bit salt
      Filesystem Block Size: 1024 bytes
      Filename Encoding: Block encoding with IV chaining
      Unique initialization vector file headers
      File holes passed through
       
    • Paranoia mode uses the following settings:
      Cipher: AES
      Key Size: 256 bits
      PBKDF2 with 3 second runtime, 160 bit salt
      Filesystem Block Size: 1024 bytes
      Filename Encoding: Block encoding with IV chaining
      Unique initialization vector file headers
      Message Authentication Code block headers
      External IV Chaining
      File holes passed through
       
    • expert / manual configuration modeでは、上記の各オプションを構成できる。 以下は、現在のオプションとその意味に関するいくつかの注意事項のリストです。 


鍵導出関数 

  • バージョン 1.5 以降、EncFS はデフォルトの鍵導出関数として PBKDF2 を使用する。
  •  キーイング関数の反復回数は、キーを生成するための実時間に基づいて選択される。
  • standardモードでは、0.5 秒の目標時間が使用され、paranoiaモードでは、3.0 秒の目標が使用される。
 
encfsctl
  • encfsctl は、EncFS ファイルシステムを操作するための管理ツール。 
  • ユーザーが指定したパスワードの変更、暗号化されたボリュームに関する基本情報の表示、およびその他の関連操作が可能。

encfsctlの使用例
$ encfsctl info ~/.crypt

バージョン6の設定; EncFS 1.9.5により作成 (版 20100713)
ファイルシステム暗号アルゴリズム: "ssl/aes", バージョン 3:0:0 (使用バージョン 3:0:2)
Filename encoding: "nameio/block", version 4:0:0 (使用バージョン 4:0:2)
鍵サイズ: 256 ビット
Using PBKDF2, with 735913 iterations
Salt Size: 160 bits
ブロックサイズ : 1024 バイト (8 バイト MAC ヘッダ含む)
Each file contains 8 byte header with unique IV data.
Filenames encoded using IV chaining mode.
File data IV is chained to filename IV.
File holes passed through to ciphertext.


2021年6月5日土曜日

Elasticsearchの起動エラーが発生したが、特別に何かしなくても解消してしまった件

 ある晴れた昼下がり、Kibanaにアクセスしたところ”Kibana server is not ready yet”というメッセージが表示された。

 

$ systemctl status kibanaで、Kibanaの状態を確認してみると、問題なく起動してた。$ systemctl status elasticsearchで、Elasticsearchの状態を確認してみると、起動中にTimeoutして起動に失敗してた。

journalctlコマンド($ journalctl -xeu elasticsearch)や、systemctlコマンド($ systemctl status elastilsearch -l)、/var/log/elasticsearch/elasticsearch.log、/var/log/messagesを見てみるが、Timeoutの理由らしきメッセージを見つけられない。

 

WebでElatisearchの起動エラーの原因を検索してみた。

  • (原因はよくわからないが、)タイムアウトの設定時間が短すぎるので、タイムアウト設定を長くする
 $ systemctl show elasticsearch | grep ^Timeout
TimeoutStartUSec=1min 15s
TimeoutStopUSec=infinity
JobTimeoutUSec=infinity
JobRunningTimeoutUSec=infinity
JobTimeoutAction=none

TimeoutStartUSecを3分にする
$ sudo mkdir /etc/systemd/system/elasticsearch.service.d
$ echo -e "[Service] \nTimeoutStartSec = 180" | sudo tee /etc/systemd/system/elasticsearch.service.d/startup-timeout.conf
 
<出力結果>
[Service]
TimeoutStartSec = 180

$ sudo systemctl daemon-reload

$ sudo systemctl show elasticsearch | grep ^Timeout
 
<出力結果>
TimeoutStartUSec=3min
TimeoutStopUSec=infinity
  • Elasticsearchに割り当てているメモリサイズが大きすぎるので、/etc/elasticesearch/jvm.options のXmsとXmxの値を小さくする(Xms(最小ヒープサイズ)とXmx(最大ヒープサイズ)は等しい値にする必要がある)

$ sudo vi /etc/elasticsearch/jvm.options

-Xms2G

-Xmx2G

  •  /etc/elasticsearch/elasticsearch.ymlの記述ミスを修正する
  • などなど

 

ただ、特に対処をしないままにElasticsearchを起動したら、問題なく起動してきてしまった。謎だ。 orz

2021年5月30日日曜日

Kibana のインストール


インストールの前に

  • Kibanaのバージョンは、Elasticsearchのバージョンと同じにする


インストール手順

  • GPG鍵のインポート
    • Elasticsearchがパッケージに署名する鍵の公開鍵をインポートする。 
 $ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
 
  • インストール
    • RPMパッケージをダウンロードしてインストールする。
    • Kibanaの最新安定バージョンは、Kibanaのダウンロードページにある。
    • リポジトリファイルを/etc/yum.repos.d/に追加してインストールすることもできる。
    • DebianやUbuntu向けにdebパッケージもあるし、Windows向けのファイルもある。
    • KibanaのDockerイメージが、Elastic Dockerレジストリから入手できる。  
$ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.13.0-x86_64.rpm
$ shasum -a 512 kibana-7.13.0-x86_64.rpm
$ sudo rpm --install kibana-7.13.0-x86_64.rpm 
Creating kibana group... OK
Creating kibana user... OK
Created Kibana keystore in /etc/kibana/kibana.keystore
[/usr/lib/tmpfiles.d/elasticsearch.conf:1] Line references path below legacy directory /var/run/, updating /var/run/elasticsearch → /run/elasticsearch; please update the tmpfiles.d/ drop-in file accordingly.
 
  • Kibanaの自動起動
    • システム起動時にKibanaが自動起動するように設定する。
$ sudo systemctl daemon-reload 
$ sudo systemctl enable kibana.service 
Synchronizing state of kibana.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable kibana
Created symlink /etc/systemd/system/multi-user.target.wants/kibana.service → /etc/systemd/system/kibana.service.

   

  • Kibanaの起動と停止
$ sudo systemctl start kibana.service
$ sudo systemctl stop kibana.service

 

  • Kibanaへログイン
    • Weブラウザで、Kibanaを実行しているマシンの5601番ポートへアクセスする。たとえば、http://localhost:5601またはhttp://HOSTNAME:5601、http://127.0.0.1:5601
    •  リモートマシンからKibanaへのアクセスを有効にする際は、 kibana.ymlのserver.hostパラメータにnon-loopbackアドレスを指定する。 
    • 1回目のインストールで、Elasticsearchのバージョンと合わせるのを忘れていたら、WebブラウザでアクセスしてもなかなかKibanaの画面が表示されず、”Kibana server is not ready yet”というメッセージだけが表示される状態が続いた。バージョンを合わせたら、サクっとKibanaの画面が表示された。


  • Kibanaの設定
    • Kibanaは、デフォルトで/etc/kibana/kibana.ymlから設定を読み込む。
    • 設定については、Kibanaの設定を読む。





2021年5月22日土曜日

Elasticsearch のインストール

Elasticsearchをインストールした。

 参考にしたページ

 

インストール手順

  • GPG鍵のインポート
    • Elasticsearchがパッケージに署名する鍵の公開鍵をインポートする。 
 $ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
 
  • インストール
    • RPMパッケージをダウンロードしてインストールする。
    • Elasticsearchの最新の安定バージョンは、Elasticsearchのダウンロードページにある。
    • リポジトリファイルを/etc/yum.repos.d/に追加してインストールすることもできる。
    • DebianやUbuntu向けにdebパッケージもあるし、MacOSやWindows向けのファイルもある。
    • デフォルトのcluster.nameとnode.nameは、それぞれelasticsearchとホスト名となっている。変更する際は、elasticsearch.ymlを編集する

$ curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.0-x86_64.rpm
$ sudo rpm -ivh elasticsearch-7.13.0-x86_64.rpm 
Verifying...                          ################################# [100%]
準備しています... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
更新中 / インストール中...
1:elasticsearch-0:7.13.0-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch/elasticsearch.keystore
[/usr/lib/tmpfiles.d/elasticsearch.conf:1] Line references path below legacy directory /var/run/, updating /var/run/elasticsearch → /run/elasticsearch; please update the tmpfiles.d/ drop-in file accordingly.

  • Elasticsearchの起動、停止
$ sudo systemctl start elasticsearch.service
$ sudo systemctl stop elasticsearch.service 
 
  • Elasticsearchの自動起動
    • Elasticsearchは、インストール後に自動で起動しない。
    • システム起動時にElasticsearchが自動起動するように設定する。
$ sudo systemctl daemon-reload 
$ sudo systemctl enable elasticsearch.service 

Synchronizing state of elasticsearch.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.

Executing: /usr/lib/systemd/systemd-sysv-install enable elasticsearch

Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.


  • Elasticsearchの動作確認
    • ローカルホストの9200番ポートにHTTPリクエストを送信することで、Elasticsearchノードが動作していることを確認できる。
$ curl -X GET "localhost:9200/?pretty"
{
  "name" : "host_name",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "xxxxxxxxxxxxxxxxxxxxxxxx",
  "version" : {
    "number" : "7.12.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "3186837139b9c6b6d23c3200870651f10d3343b7",
    "build_date" : "2021-04-20T20:56:39.040728659Z",
    "build_snapshot" : false,
    "lucene_version" : "8.8.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

  •  Logstashは、強力なデータ解析および変換機能を追加するが、通常は必須ではない。
  •  セキュリティの実装は割愛されているので、ネットワークを介して機密データを送信する場合は、Elastic Stackを保護し、暗号化された通信を有効にする必要がある。  
  • 一部の商用機能は、自動的にインデックスを作成する。Elasticsearchは、デフォルトでインデックスの自動作成が許可されている。LogstashやBeatを使用してるいてる場合は、elasticsearch.ymlのaction.auto_create_indexに追加のインデックス名が必要になる可能性が高く、正確な値はローカル構成によって異なる。利用環境の正しい値がわからない場合は、すべてのインデックスの自動作成を許可するようにする。

 

 関連するページ

 

2021年5月8日土曜日

Elastick Stack のインストール概要

Elastick Stack をインストールことにした。OSは、AlmaLinux 8.3

 各プロダクトが依存するコンポーネントが適切に配置されるために、インストールする順番が決まている。

  1. Elastick Search
  2. Kibana
  3. Logstash
  4. Beats
  5. APM Server
  6. Elastick Search Hadoop

 

参考にしたページ

 

2021年5月5日水曜日

Elastic Stackの勉強をすることにした

 AlmaLinuxをなにに使うかを考えたところ、Elastic Stackの勉強をすることにしました。

今日は、Webinar2本を視聴して終わってしまったので、手を動かすのは明日からです。w

Elasticsearchのデータ操作入門は、とても分かりやすくて最初に見る動画としては最適でした。Kibanaは、T-potのUIとして触ったことがあったので、記憶をたどる旅をしてました。

T-potを触っているときに、ElasticsearchやKibanaの勉強をしていればと思わなくもないですが、六十の手習い、It's never too late to start!ということで、これから頑張る。

目指すは、認定技術者。


今日見たWebinar

日本語フォントを追加した

 AlmaLinuxに日本語フォントを追加したのでメモしておきます。

 フォントをダウンロードしてきて、以下のフォルダに保存する。zipファイルは、unzipしてから保存する。

  • 全ユーザで使用する
    • /usr/share/fonts
  • 自分だけで使用する 
    • ~/.fonts

フォントのキャッシュを更新する。

$ fc-cache -fv

 

日本語フォントの例

AlmaLinux で日本語入力と時刻設定

Linux環境のシステム構築について勉強しようと思い立った。

GNUの人がFreeなディストロを紹介してくれているが、メジャーなディストロを選択することにした。魔空空間に引きずり込まれたCentOS8に替わるRHELクローンのOSとしてAlmaLinuxがリリースされたので、OSはAlmaLinuxにしました。

OSのインストールは、 さくっと終了。

日本語入力ができなかったのと、時刻が狂っていたので設定。

  • 日本語入力
    • 「設定」>「Region & Language」で、「入力ソース」に「日本語(かな漢字)」がない
    • # dnf -y install libkkc libkkc-data ibus-kkc で、必要なパッケージをインストール
    • 「設定」>「Region & Language」で、「入力ソース」に「日本語(かな漢字)」が出てきたので選択
    • 「設定」>「デバイス」>「Keyboad」の「タイピング」で、 入力ソースの切り替えを、「Alt+`」へ変更
  • 時刻設定
    • # date --s "2021/05/05 12:00:00"
 
CentOSのリボジトリには、MOZCが含まれていないらしい。 kkcは、日本語入力時の英語入力が思いどおりにならないので、不便ですね。私だけですか。そうですか。
 
 
Special Thanks