5. コンテンツにスキップ

5. Windows版 Elasticsearchの導入

Windowsサーバーに対してElasticsearchの導入を行う場合の手順を説明します。

5.1 Elasticsearchの設定

Senju Service Managerと連携するElasticsearchサーバーの稼働に必要なソフトウェアである、Elasticsearchをインストールするための手順について説明します。

5.1.1 対象バージョン

Senju Service Managerと連携するElasticsearchサーバーではElasticSearch 8.17.2、8.19.18または9.4.3 を使用します。

ここでは、ElasticSearch 8.17.2を例として導入手順を説明します。

仕様補足

サポート対象となるElasticsearchのバージョンについては リリースノート を参照してください。

5.1.2 Elasticsearchのインストール

  1. elasticsearch-8.17.2.zipを入手し稼働させたいディレクトリに展開します。

    ※以下、展開したディレクトリを%elasticsearch_home%と記載して説明します。

  2. Elasticsearch の設定ファイルを編集します。

    %elasticsearch_home%\config\elasticsearch.yml

  3. cluster.name を ssm-cluster に設定します。

    #cluster.name: my-application 
    cluster.name: ssm-cluster 
    
  4. network.host に Elasticsearch サーバーのループバックアドレス、Elasticsearch サーバーの ホスト名もしくはIP アドレスを指定します。

    #network.host: 0.0.0.0 
    network.host: 127.0.0.1, eshost
    

    仕様補足

    デフォルトではすべての接続を許可するため、ループバックアドレスおよびElasticsearchサーバーのホスト名もしくはIPアドレスを指定することで、不正なアクセスを拒否しています。

  5. cluster.initial_master_nodesにElasticsearchサーバーのホスト名を指定します。

    #cluster.initial_master_nodes: ["node-1","node-2"] 
    cluster.initial_master_nodes: ["eshostname"] 
    
  6. node.nameにElasticsearchサーバーのホスト名を指定します。

    #node.name: node-1
    node.name: eshostname
    
  7. (Kibanaを利用する場合)以下の記載を追加します。

    script.max_size_in_bytes: 10000000
    
  8. GeoIpの自動更新を false に設定します。

    ingest.geoip.downloader.enabled: false
    
  9. Elastic Stackのセキュリティ機能を無効(false)に設定します。

    xpack.security.enabled: false
    
  10. Elasticsearch のログ設定ファイルを編集します。

    elasticsearch_home%\config\log4j2.properties

    以下の設定をファイルのappender.rolling.policies.time.modulateの後に追加します。

    appender.rolling.strategy.type = DefaultRolloverStrategy
    appender.rolling.strategy.action.type = Delete
    appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
    appender.rolling.strategy.action.condition.type = IfLastModified
    appender.rolling.strategy.action.condition.age = 7D
    appender.rolling.strategy.action.PathConditions.type = IfFileName
    appender.rolling.strategy.action.PathConditions.glob = ${sys:es.logs.cluster_name}-*
    

    修正後のファイルが以下の通りになっていることを確認します

    ... (省略) 
    appender.rolling.policies.time.modulate = true
    appender.rolling.strategy.type = DefaultRolloverStrategy
    appender.rolling.strategy.action.type = Delete
    appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
    appender.rolling.strategy.action.condition.type = IfLastModified
    appender.rolling.strategy.action.condition.age = 7D
    appender.rolling.strategy.action.PathConditions.type = IfFileName
    appender.rolling.strategy.action.PathConditions.glob = ${sys:es.logs.cluster_name}-*
    appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
    ... (省略) 
    
  11. ElasticsearchのHEAPメモリ拡張を編集します。

    %elasticsearch_home%\config\ jvm.options

    修正前

    ... (省略) 
    ## -Xms4g
    ## -Xmx4g
    ... (省略)
    

    修正後

    例:

    ... (省略) 
    -Xms4g
    -Xmx4g
    ... (省略) 
    

仕様補足

-Xms および -Xmxは:物理メモリサイズの半分を推奨します。
例:8GBの物理メモリを搭載している場合4GB (4g) を設定してください。

5.1.3 Elasticsearchのインストール確認

  1. コマンドプロンプトを開いて、以下のコマンドを実行し、Elasticsearchを起動します。

    • コマンド
      cd %elasticsearch_home%\bin
      elasticsearch.bat
      

  2. "started"という文言が表示されたら、もう一つコマンドプロンプトを開いて、下記コマンドを実行します。

    • コマンド
      cd %elasticsearch_home%\bin
      curl -H "Content-Type: application/json" -XGET "http://localhost:9200/?pretty"
      

    以下のような応答があることを確認します。

    ... (省略) 
    "cluster_name":"ssm-cluster", 
    ... (省略) 
    

5.2 ElasticSearchの検索設定

Senju Service Managerと連携するElasticsearchサーバーで形態素解析に必要なソフトウェアである、Kuromojiをインストールするための手順について説明します。

5.2.1 対象バージョン

Senju Service Managerと連携するElasticsearchサーバーではKuromoji 8.17 を使用します。

ここでは、Kuromoji 8.17.2を例として導入手順を説明します。

仕様補足

サポート対象となるKuromojiのバージョンについては リリースノート を参照してください。

5.2.2 ElasticSearchの検索設定

  1. analysis-kuromoji-8.17.2.zipを入手し任意のディレクトリに展開します。

  2. %elasticsearch_home%\plugins\配下に以下の名称のフォルダを作成してください。

    • フォルダ名:analysis-kuromoji
  3. analysis-kuromoji-8.17.2配下のファイルを作成したフォルダにコピー上書きしてください。

  4. コマンドプロンプトを開いて、以下のコマンドを実行し、Elasticsearchを再起動します。

    • コマンド
      cd %elasticsearch_home%\bin
      elasticsearch.bat
      

5.2.3 インストール確認

  1. Kuromoji(形態素解析ソフトウェアプラグイン)がインストールされていることを確認します。

    • コマンド
      cd %elasticsearch_home%\bin
      elasticsearch-plugin list analysis-kuromoji
      

    以下のような出力結果があることを確認します。

    analysis-kuromoji 
    

5.2.4 データクローラの設定

  1. Senju Service Managerのインストールメディアから、elasticsearch-definitionsフォルダのElasticsearch設定ファイルを取得し、インストールするサーバーの任意のディレクトリに格納します。

    ファイル名 説明
    pipeline_attachment.json パイプライン設定(添付ファイル)
    sm_mappings.json Index Template(プロセス管理)
    sm_mappings_ci.json Index Template(構成管理)
    sm_mappings_faq.json Index Template(FAQ)
    sm_mappings_filelibrary.json Index Template(ファイルライブラリ)

    以降では、上記ファイルを下記ディレクトリに格納した場合を例示いたします。

    • ディレクトリパス: %elasticsearch_home%\elasticsearch-definitions\
  2. curlコマンドを使用して、パイプライン設定をElasticsearchサーバーに登録します。

    • コマンド
      curl -H "Content-Type: application/json" -XPUT "http://localhost:9200/_ingest/pipeline/attachment?pretty" --data-binary @%elasticsearch_home%\elasticsearch-definitions\pipeline_attachment.json
      
  3. 以下のレスポンスが返ってきており、登録が成功したことを確認します。

    {
    "acknowledged" : true
    }
    
  4. curl コマンドを使用して、IndexTemplateを Elasticsearch サーバーに登録します。

    • プロセス管理の場合

      • コマンド
        curl -H "Content-Type: application/json" -XPUT "http://localhost:9200/_template/doc?pretty" --data-binary @%elasticsearch_home%\elasticsearch-definitions\sm_mappings.json
        
    • 構成管理の場合

      • コマンド
        curl -H "Content-Type: application/json" -XPUT "http://localhost:9200/_template/doc_ci?pretty" --data-binary @%elasticsearch_home%\elasticsearch-definitions\sm_mappings_ci.json
        
    • FAQの場合

      • コマンド
        curl -H "Content-Type: application/json" -XPUT "http://localhost:9200/_template/doc_faq?pretty" --data-binary @%elasticsearch_home%\elasticsearch-definitions\sm_mappings_faq.json
        
    • ファイルライブラリの場合

      • コマンド
        curl -H "Content-Type: application/json" -XPUT "http://localhost:9200/_template/doc_filelibrary?pretty" --data-binary @%elasticsearch_home%\elasticsearch-definitions\sm_mappings_filelibrary.json
        
  5. 以下のレスポンスが返ってきており、登録が成功したことを確認します。

    • プロセス管理の場合

      { 
          "acknowledged" : true 
      } 
      

5.2.5 インデックスの作成

  1. curlコマンドを使用して、Indexを作成します。

    • プロセス管理の場合

      • コマンド
        curl -XPUT "http://localhost:9200/ssm?pretty"
        
    • 構成管理の場合

      • コマンド
        curl -XPUT "http://localhost:9200/ssm_ci?pretty"
        
    • FAQの場合

      • コマンド
        curl -XPUT "http://localhost:9200/ssm_faq?pretty"
        
    • ファイルライブラリの場合

      • コマンド
        curl -XPUT "http://localhost:9200/ssm_filelibrary?pretty"
        
  2. 以下のレスポンスが返ってきており、登録が成功したことを確認します。

    • プロセス管理の場合
      {
          "acknowledged" : true,
          "shards_acknowledged" : true,
          "index" : "ssm"
      }
      

5.3 Elasticsearchへのデータ連携設定

Senju Service ManagerからElasticsearchへのデータ連携のためのアプリケーションとしてElasticsearchが提供するLogstashを導入します。

5.3.1 Logstashのインストール

logstash-8.17.2.zipを入手し稼働させたいフォルダに展開します。

5.3.2 Logstashの設定

  1. Senju Service Manager のインストールメディアに格納されているLogstashおよびlogstash-definitions フォルダ一式をインストールするサーバーの任意のディレクトリに格納します。

    • フォルダ名: logstash
    • フォルダ名: logstash-definitions

    以降では、上記フォルダを下記格納フォルダ配下に格納した場合を例示いたします。

    • 格納フォルダパス C:\temp\logstash-8.17.2

    設定ファイル logstash-xxx.confを以下の通り更新します。

    ファイル名 説明
    logstash-postgresql.conf 設定ファイル(プロセス管理)
    logstash-postgresql_ci.conf 設定ファイル(構成管理)
    logstash-postgresql-faq.conf 設定ファイル(FAQ)
    logstash-postgresql-filelibrary.conf 設定ファイル(ファイルライブラリ)
    • jdbc_connection_string に記載されている PostgreSQL DB への接続情報について、[hostname]:[portnumber]/[dbname] から、SSM DB サーバーの ホスト名:ポート番号/ローカル・ネット・サービス名に変更します。

      例としてホスト名:ccfsphost、ポート番号:5432、ローカル・ネット・サービス名:ssmdb に変更する場合を以下に示します。

      # jdbc_connection_string =>"jdbc:postgresql://[hostname]: [portnumber]/[dbname]" 
      jdbc_connection_string => " jdbc:postgresql://ccfsphost:5432/ssmdb" 
      
    • jdbc_user に記載されている DB ユーザー名について、[username]から、正しいユーザー名に変更します。

      例としてDB ユーザー名:ssmuser に変更する場合を以下に示します。

      # jdbc_user => "[username]" 
      jdbc_user => "ssmuser" 
      
    • jdbc_password に記載されている DB ユーザーのパスワードについて、[password]から、正しいパスワードに変更します。

      例としてDB ユーザーのパスワードをssmpwd に変更する場合を以下に示します。

      # jdbc_password => "[password]" 
      jdbc_password => "ssmpwd" 
      
    • hosts に記載されている Elasticsearch への接続情報について、[protocol]://[hostname]:[portnumber]から、Elasticsearch サーバーのプロトコル://ホスト名:ポート番号に変更します。

      例としてプロトコル:http、ホスト名:eshost、ポート番号:9200 に変更する場合を以下に示します。

      #hosts => [ "[protocol]://[hostname]:[portnumber]"] 
      hosts => [ "http://eshost:9200"] 
      
    • jdbc_driver_library に記載されている Elasticsearch への接続情報について、optから、展開したディレクトリパスに更新します。

      例として"C:\temp\logstash-8.17.2\logstash\lib\ojdbc7.jar"に変更する場合を以下に示します。示します。

      #jdbc_driver_library => "/opt/logstash/lib/ojdbc7.jar"
      jdbc_driver_library => "C:\temp\logstash-8.17.2\logstash\lib\ojdbc7.jar"
      
    • last_run_metadata_path に記載されている Elasticsearch への接続情報について、optから、展開したフォルダパスに更新します。

      例として "C:\temp\logstash-8.17.2\logstash\conf\.logstash_postgresql_process_fil_last_run"に変更する場合を示します。

      #last_run_metadata_path=> "/opt/logstash/conf/.logstash_postgresql_process_sub_fil_last_run"
      last_run_metadata_path=> "C:\temp\logstash-8.17.2\logstash\conf\.logstash_postgresql_process_
      fil_last_run"
      
      - statement_filepath に記載されている Elasticsearch への接続情報について、optから、展開したフォルダパスに更新します。

      例として"C:\temp\logstash-8.17.2\logstash\lib\ojdbc7.jar"に変更する場合を示します。

      #statement_filepath => "/opt/logstash/sql/postgresql/get_sm_data_from_process_sub_fil.sql"
      statement_filepath=> "C:\temp\logstash-8.17.2\logstash\sql\postgresql\get_sm_data_from
      _process_fil.sql"
      
  2. 修正後のファイルは以下のようになります。

    • logstash-postgresql.confの場合

      ... (省略)
      input {
      # for Upsert PROCESS_FIL records
      jdbc {
      jdbc_connection_string => "jdbc:postgresql://ccfsphost:5432/ssmdb"
      jdbc_driver_library => "C:\temp\logstash-8.17.2\logstash\lib\postgresql-42.2.8.jar"
      jdbc_driver_class => "org.postgresql.Driver"
      jdbc_user => "ssmuser"
      jdbc_password => "ssmpwd"
      
      schedule => " * * * "
      last_run_metadata_path => "C:\temp\logstash-8.17.2\logstash\conf\.logstash_ postgresql process_fil_last_run"
      record_last_run => "true"
      use_column_value => "true"
      tracking_column => "update_ts"
      statement_filepath => "C:\temp\logstash-8.17.2\logstash\sql\postgresql \get_sm_data_from_process_fil.sql"
      
      type => "get_process_fil"
      }
      
      # for Upsert PROCESS_SUB_FIL records
      jdbc {
      jdbc_connection_string => " jdbc:postgresql://ccfsphost:5432/ssmdb"
      jdbc_driver_library => "C:\temp\logstash-8.17.2\logstash\lib\postgresql-42.2.8.jar"
      jdbc_driver_class => "org.postgresql.Driver"
      jdbc_user => "ssmuser"
      jdbc_password => "ssmpwd"
      schedule => " * * * "
      last_run_metadata_path => "C:\temp\logstash-8.17.2\logstash\conf\.logstash postgresql process_sub_fil_last_run"
      record_last_run => "true"
      use_column_value => "true"
      tracking_column => "update_ts"
      statement_filepath => "C:\temp\logstash-8.17.2\logstash\sql\postgresql \get_sm_data_from_process_sub_fil.sql"
      type => "get_process_sub_fil"
      }
      
      ... (省略)
      
      # for Upsert PROCESS_TABLE_ITEM_5_FIL records
      jdbc {
      jdbc_connection_string => " jdbc:postgresql://ccfsphost:5432/ssmdb"
      jdbc_driver_library => "C:\temp\logstash-8.17.2\logstash\lib\postgresql-42.2.8.jar"
      jdbc_driver_class => "org.postgresql.Driver"
      jdbc_user => "ssmuser"
      jdbc_password => "ssmpwd"
      schedule => " * * * "
      last_run_metadata_path => "C:\temp\logstash-8.17.2\logstash\conf\.logstash postgresql _process_table_item_5_fil_last_run"
      record_last_run => "true"
      use_column_value => "true"
      tracking_column => "update_ts"
      statement_filepath => "C:\temp\logstash-8.17.2\logstash\sql\postgresql \get_sm_data_from_process_table_item_5_fil.sql"
      type => "get_process_table_item_5_fil"
      }
      
      ... (省略)
      
      output {
      if [type] == "get_process_fil" {
      elasticsearch{
      hosts => [ "http://eshost:9200"]
      index => "ssm"
      document_id => "%{insert_no}"
      action => "update"
      retry_on_conflict => 10
      doc_as_upsert => true
      # user => "[elasticusername]"
      # password => "[elasticpassword]"
      }
      } else if [type] == "get_process_sub_fil" {
      elasticsearch{
      hosts => [ "http://eshost:9200"]
      
      ... (省略)
      
  3. フォルダパス C:\temp\logstash-8.17.2\logstashを確認します。

    C:\temp\logstash-8.17.2\logstashパスに「conf」フォルダが存在しない場合、「conf」フォルダを作成してください。

  4. 設定ファイル pipelines.yml を編集します。

    • ファイルパス:C:\temp\logstash-8.17.2\config \pipelines.yml

    インデックス(ssm,ssm_faq,ssm_filelibrary,ssm_ci)ごとにpipelineの設定を末尾に追記します。

    項目 設定値
    pipeline.id (インデックス名)
    pipeline.workers 1
    pipeline.batch.size 1
    path.config (設定ファイルのパス)
    queue.type persisted

    修正後のファイルは以下のようになります。

    ... (省略)
    - pipeline.id: ssm
      pipeline.workers: 1
      pipeline.batch.size: 1
      path.config: "/temp/logstash-8.17.2/logstash-definitions/logstash-postgresql.conf"
      queue.type: persisted
    - pipeline.id: ssm_faq
      pipeline.workers: 1
      pipeline.batch.size: 1
      queue.type: persisted
      path.config: "/temp/logstash-8.17.2/logstash-definitions/logstash-postgresql-faq.conf"
    - pipeline.id: ssm_filelibrary
      pipeline.workers: 1
      pipeline.batch.size: 1
      queue.type: persisted
      path.config: "/temp/logstash-8.17.2/logstash-definitions/logstash-postgresql-filelibrary.conf"
    - pipeline.id: ssm_ci
      pipeline.workers: 1
      pipeline.batch.size: 1
      queue.type: persisted
      path.config: "/temp/logstash-8.17.2/logstash-definitions/logstash-postgresql_ci.conf"
    
  5. Logstash のログ設定ファイル log4j2.properties を編集します。

    • ファイルパス:C:\temp\logstash-8.17.2\config\log4j2.properties

    以下の設定をファイルのappender.rolling.layout.patternの後に追加します。

    appender.rolling.strategy.type = DefaultRolloverStrategy
    appender.rolling.strategy.action.type = Delete
    appender.rolling.strategy.action.basepath = ${sys:ls.logs}
    appender.rolling.strategy.action.condition.type = IfLastModified
    appender.rolling.strategy.action.condition.age = 7D
    appender.rolling.strategy.action.PathConditions.type = IfFileName
    appender.rolling.strategy.action.PathConditions.glob = logstash-${sys:ls.log.format}-*
    

    修正後のファイルが以下の通りになっていることを確認します。

    ... (省略) 
    appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %-.10000m%n
    appender.rolling.strategy.type = DefaultRolloverStrategy
    appender.rolling.strategy.action.type = Delete
    appender.rolling.strategy.action.basepath = ${sys:ls.logs}
    appender.rolling.strategy.action.condition.type = IfLastModified
    appender.rolling.strategy.action.condition.age = 7D
    appender.rolling.strategy.action.PathConditions.type = IfFileName
    appender.rolling.strategy.action.PathConditions.glob = logstash-${sys:ls.log.format}-*
    appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
    ... (省略) 
    

5.3.3 インストール確認

  1. コマンドプロンプトを開いて、以下のコマンドを実行し、Logstashを起動します。

    • コマンド
      cd C:\temp\logstash-8.17.2\bin
      logstash.bat
      

5.3.4 Elasticsearchサービスの生成

  1. コマンドプロンプトを開いて、以下のコマンドを実行し、サービスを生成します。\

    • コマンド
      cd %elasticsearch_home%\bin
      elasticsearch-service.bat install
      

  2. 生成されたElasticsearchサービスを自動起動する設定に変更する手順を説明します。

    1. 「スタート」メニュー→「管理ツール」→「サービス」を選択します。

    2. 「1.」に生成されたElasticsearchサービスを右クリックし、コンテキストメニューからプロパティを選択します。

    3. プロパティの[全般]タブの[スタートアップの種類]を「自動」に変更し、[OK]ボタンをクリックしてください。

    ※Elasticsearchサービス名はデフォルトではelasticsearch-service-x64となります。

5.3.5 Logstashサービスの生成

  1. nssm-2.24.zipを入手し稼働させたいディレクトリに展開します。

    ※以下、展開したディレクトリを%nssm_home%と記載して説明します。

  2. nssmを利用してLogstashサービスを生成します。

    • コマンド
      cd %nssm_home%\win64
      nssm install サービス名
      

  3. 「NSSM service installer」設定ダイアログを開き、下記の通り設定を行います。

    「Application」タブの設定:

    Path:C:\temp\logstash-8.17.2\bin\logstash.bat 
    StartUp directory:C:\temp\logstash-8.17.2\bin 
    Arguments: 
    Service name:手順 2 で入力した「サービス名」であることを確認
    

    「Details」タブの設定:

    Display name:手順 2 で入力した「サービス名」と同じ名称を入力
    Service name:手順 2 で入力した「サービス名」であることを確認
    

  4. 「Install service」ボタンをクリックするとサービスの生成が完了します。

5.3.6 サービス確認

ElasticsearchとLogstashが正しくサービスとして登録されていることを確認します。

  1. Elasticsearchサービスを起動します。

    • コマンド
      cd %nssm_home%\win64
      nssm start Elasticsearchサービス名
      

    仕様補足

    Elasticsearchサービス名はデフォルトではelasticsearch-service-x64となります。

  2. Logstashサービスを起動します。

    • コマンド
      cd %nssm_home%\win64
      nssm start Logstashサービス名
      

5.4 Elasticsearchのmax_analyzed_offset設定

Senju Service Managerと連携するElasticsearchサーバーの、max_analyzed_offsetを設定します。

  1. curl コマンドを実行してmax_analyzed_offsetを設定します。

    • コマンド
      curl -XPUT "http://localhost:9200/_settings?pretty" -H "Content-Type:application/json" -d "{\"index\":{\"highlight.max_analyzed_offset\":51000000}}"
      

    以下のレスポンスが返ってきており、設定が成功したことを確認します。

    {
      "acknowledged" : true
    }
    
  2. ElasticsearchとLogstash を再起動します。

    • コマンド
      nssm stop Elasticsearchサービス名
      nssm start Elasticsearchサービス名
      cd %nssm_home%\win64
      nssm restart Logstashサービス名
      

5.5 ウィルススキャンの除外設定

Elasticsearchが稼働している環境において、アンチウィルスソフトのようなセキュリティ関連ソフトや、バックアップソフト等の予期しない動作により、パフォーマンスの影響や動作不調を起こす場合があります。 そのため、アプリケーションやミドルウェアのフォルダやファイルをリアルタイム検索から除外していただく必要があります。 各アンチウィルスソフトの除外設定手順に従い、設定を行ってください。 対象は 資料集「1.1 Senju Service Managerシステム」の9)を参照してください。

5.6 Senju Service Managerの設定

Elasticsearch連携機能を使用する際に、Senju Service Managerで削除されたレコードをElasticsearchサーバーから削除するには、別途提供されているElasticsearchデータ削除モジュールを実行する必要があります。 定期的にElasticsearchデータを同期する場合、タスクスケジューラ等に該当モジュールの定期実行を設定してください。

仕様補足

該当モジュールの処理内容の詳細については、別紙「コマンドリファレンス」の「1.2.22 ElasticSearchデータ削除モジュール(sjSPU_ElasticSearchDelete.vbs)」を参照してください。

仕様補足

該当設定を行わず、Senju Service Managerで削除されているデータが全文検索および類似検索の結果として表示された場合、検索されたレコードのタイトルをクリックすると、「指定された情報は既に削除されています」と表示されます。