参考文献
- Elasticsearch実践ガイド, impress, 2018
- Install Kibana with Docker external_link
- Metricbeat Reference [8.14] ›Modules >SysteModules external_link
Elasticsearch の構成
- データ構造
1Zldc5wgGIV/jfeLsK5eNpuk7XR6tZ32mlGqzKg4hl21v74YwQ9wk3S6EnK17AE/eOC8c1QPHov2c42r7DtLSO75u6T14L3n+2Dvh+KnV7pBCXe7QUhrmshBk3Cif4gU1bAzTcjTYiBnLOe0WooxK0sS84WG65o1y2G/Wb68aoVTYginGOem+osmPJOz8A+T/oXQNFNXBkE09BRYDZYzecpwwpqZBB88eKwZ40OraI8k7+EpLsNxj1d6xxurScnfcoBaiQvOz3JyX8uEtPLueKemXLOz0PujgAfvmoxycqpw3Pc2YpGFlvEil90XUnMqcH3KaVoKjbN+gLyS6CPt1dsFIwSxewgrCK87MUQeEEhsct8A9b+ZViFQWjZbAQiliOXKp+OpJziiIflcgRsYrO5ZfC76e3cTV6jhikxcKFrBBW6Ba2/QeqREGM1NVAAsWfnQZDVimbM63ACVb6D6Rrr/A3ULJFBDsuI2tGa2GxCBBpGfz813ZxK+zmS/ERO1Qz+Io/RibdVRADhpKb0i27QUMKuMG56Cb6gzm3nKLDQuewoB9I6eQk56CkGNiU1PmSHHDU+h8HUom3nqYED5WDkZopUdtFlOBuYjmMslSA/KMLRZgiInS5CelBGwV4LUmwTnSpAeldegbFWCfDP+uewpPSpb9ZTv5tOnXpStesrVx089Klv1lBn/XPaUHpXtesrMhS54So/KVj1lvj11w1N6VLbqqZeicpCLK90l9CKaad/80VVEyeLMsx5HPbiPluVq7QX0mCfnbMfi/w9wxd/pu8lz3+zrE3z4Cw==
- RDB との対応
Elasticsearch | RDB |
---|---|
Index | Table |
Document | Record |
Field | Column |
Document Type | Schema |
- クラスタ運用が可能
- 複数のノードにまたがって Shade を作成する。Index は Shade に格納する
- Shade では、どこかのノードが Primary になって、他のノードは Replica になる
- 運用中に Replica を追加することができる
5Zhds5owEIZ/DfckgOhltaftTT+mTtvrKKukDYQJsWp/fRcJCCb2dEYP0ukV8GYD2WdfQoIXLLLDW8WK9L1MQHjUTw5e8NqjlER0iodKOdbK1PdrYat4YoLOwpL/AiM2YTueQNkL1FIKzYu+uJZ5Dmvd05hSct8P20jRf2rBtmAJyzUTtvqNJzo1WdD4rL8Dvk2bJ5PJrG7JWBNsMilTlsh9RwqevGChpNT1WXZYgKjgNVzqfm+utLYDU5Drv+owqXv8ZGJnkjMD08cmWyV3eQJVB98L5vuUa1gWbF217rG+qKU6E3hF8NTcDpSGw9UxkTZTtAjIDLQ6Yojp0LAx5iDN9f6MOm4Mk3Yw09CIzJR32976TABPDAQ3EGrx+ID2JRaUZzCwsqiNt+GHCt28IsLRQa8E3+aoa1m0tCw0DoBXaZHwAtfExkViB65WvAVX4MRle2g0uAI6eyCu0IkrGC+u6PJlHBQXIRave8xOt71vpE+E+jaR0DU93WN2Ivb0ND4gDotEsxcCElk8PimeseMfqJBhqEwvqBCbytT1EbsDFPub/hkKgfPDw6kEcfgwKvFYrRJNoj6UeDgos3/HKgNSaVw5QixkOphZvpSgPq6+VysN6gu2AlF3rfYszYq4EJhrivsnUP09Vc4yQ+grU5ytkNdJbxGHnTQN/g5WpKH77Eqt5A9YSCEVKrnMMXK+4UJcSMwsgdbIGJRjbZTxJKke4yyWxOiNOO3IUoyD/E5mHuxjgJeduj1fR3prHaP/uY4v9/I56ojS+cfAKbzzeyV4+g0=
- Elastic Stack
5Vldb9s2FP01BLqXQRIlWXq0HGcr2mHBsnbtIyMxFjdaDCg6tvvrd2WRtkTKrmfYiZcCBkxeXlLkuUf3g0J4Ml/9IslT+ZsoKEeBV6wQvkFB4EdBAn+NZN1KEs9rBTPJCq20E9yzb1QLjdqCFbTuKSohuGJPfWEuqormqicjUoplX+1R8P5Tn8iMOoL7nHBX+hcrVKlPEYx28l8pm5XmyX6ctiNzYpT1SeqSFGLZEeEpwhMphGpb89WE8gY8g0s773bP6HZjklbqmAlmxjPhC304vTG1NqeVYlEVtJngIZwtS6bo/RPJm9El2BdkpZpz6PnQ1MtRqehq75787UmBIlTMqZJrUDETDDiaHaa73EEdG1nZgRmnWki0eWfbpXcIQEODsAcQB48pJ7VieU2JzEsUxBwelxXsGZqzpvkOTTFK4DfSjWyyaQQou9WSNHWG0p/MUrCjzmoH0PdfBP3QD3vo+6kLvz8Ef3wG9PEAGx3AP7AHUpF98Ln2+czqBeHsG1FMVNcKuz/yXg/28BjYP4pZrUhdHg/8wRcjQskYjb2mkY3QOLpWw9jvAx5wRxczTHSMYTJKVH0+q9yiZIqmKUozlMTXapXY817PKvH3YyatinGTaEAvh/hRs7wPQT+mwqHl+ose2nS+NiM/R6Z7s+pq3qxNb8XUl1YzxbrfzvRi099NbTrdmXdUMjg7lVrWHoIWTu5jGQUOKhYypz2KKiJnVHViqGu6jmmiAcsYmaQcPPVzfxND5tJPuBMMtrdlxjYL0MwIsWXxdvN6Vjc1shYKQ4tiibVQe2RnoQ17tsc+ilDJ1RGqR6boIJXORpvwNWkTJ37f2jg8jTZR2I8Xgc2/89EmvRhtOkz52mXR9/1QlzgXoE14Zd4m9i0nYceXU2njLHQybT7VVP7+8HdTBwceJw+Utwv+Mb3/cxP5PfiN795r/DlE7RIKYir7RXJF5hqkz0Qy8gAM28i3pWc3YGuidogIoV71qVcrKf6hE8FFE4AqUYFm9sg4t0SQus+qhr/AiyZWZU3iwKAYH+uBOSuK5jGDaYcA7Ue+eQFK0KPVefKPyIoyQejmH8kA7YL/nn5At2PCPXX/UOH0xiNI4LoC/JquwC4UHFsf6wow9g4vdPWuoOuS37wrwNZ11VDlfjlX8FImDX8ok46sVzl5iyaNfySTRval8ou+pW7Adku+W2hVqjhwZTO+MTc13v/npsbOlGIX94td1Jh1z5gWnZDe7KuqdsnTcCp1WlpkmHU1JdLZLmTsQGt/7jk5LYLu7otbq777bomn/wI=
- Beats の種類
Beats | 収集データ |
---|---|
Filebeat | ファイルの監視 |
Metcisbeat | 機器からのデータ |
Packetbeat | パケット |
Winlogbeat | Windows Log |
Heartbeat | 生存監視 |
Auditbeat | 認証・認可の監視 |
-
Elasticsearch の操作方法
- curl コマンドから REST API をたたく
- Kibana から Query をたたく
Elasticsearch, Kibana のインストール
- Growi の docker-compose に Kibana を追加する
services: growi: build: context: . dockerfile: ./Dockerfile # ports: # - 127.0.0.1:3000:3000 # localhost only by default links: - mongo:mongo - elasticsearch:elasticsearch depends_on: - mongo - elasticsearch environment: - MONGO_URI=mongodb://mongo:27017/growi - ELASTICSEARCH_URI=http://elasticsearch:9200/growi - PASSWORD_SEED=changeme # - FILE_UPLOAD=mongodb # activate this line if you use MongoDB GridFS rather than AWS # - FILE_UPLOAD=local # activate this line if you use local storage of server rather than AWS # - MATHJAX=1 # activate this line if you want to use MathJax # - PLANTUML_URI=http:// # activate this line and specify if you use your own PlantUML server rather than public plantuml.com # - HACKMD_URI=http:// # activate this line and specify HackMD server URI which can be accessed from GROWI client browsers # - HACKMD_URI_FOR_SERVER=http://hackmd:3000 # activate this line and specify HackMD server URI which can be accessed from this server container # - FORCE_WIKI_MODE='public' # activate this line to force wiki public mode # - FORCE_WIKI_MODE='private' # activate this line to force wiki private mode entrypoint: "dockerize -wait tcp://mongo:27017 -wait tcp://elasticsearch:9200 -timeout 60s /docker-entrypoint.sh" command: ["yarn migrate && node -r dotenv-flow/config --expose_gc dist/server/app.js"] restart: unless-stopped volumes: - growi_data:/data networks: - dmz - trust mongo: image: mongo:6.0 restart: unless-stopped volumes: - mongo_configdb:/data/configdb - mongo_db:/data/db networks: - trust elasticsearch: build: context: ./elasticsearch/v8 dockerfile: ./Dockerfile ports: - 127.0.0.1:9200:9200 environment: - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms256m -Xmx256m" # increase amount if you have enough memory - LOG4J_FORMAT_MSG_NO_LOOKUPS=true # CVE-2021-44228 mitigation for Elasticsearch <= 6.8.20/7.16.0 ulimits: memlock: soft: -1 hard: -1 restart: unless-stopped volumes: - es_data:/usr/share/elasticsearch/data - ./elasticsearch/v8/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml networks: - trust kibana: image: docker.elastic.co/kibana/kibana:8.7.0 ports: - 127.0.0.1:5601:5601 restart: unless-stopped # volumes: # - ./kibana.yml:/usr/share/kibana/config/kibana.yml networks: - dmz - trust volumes: growi_data: mongo_configdb: mongo_db: es_data: networks: dmz: external: true trust:
- docker-compose を再起動する
$ docker compose down $ docker compose up --force-recreate -d
Metricsbeat のインストール
- こっちは、ホストマシンにサービスとしてインストールする
- docker上で動いている Elasticsearch にログを投入する
- Elasticsearch に格納された CPU 負荷やメモリ利用率を Kibana でグラフ化する
- Kiban のダッシュボード (データのVisualization設定) のテンプレートが Metricsbeat にあるので Kiban にインスト―する
- https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html external_link
- Ubuntuの場合は Debian パッケージをインストールする
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.14.1-amd64.deb sudo dpkg -i metricbeat-8.14.1-amd64.deb
- アクセス先設定をする /etc/metricbeat/metricbeat.yml
output.elasticsearch: hosts: ["localhost:9200"] ... setup.kibana: host: "localhost:5601"
- system モジュールの有効化
ubuntu@www4250uj:/etc/metricbeat$ sudo metricbeat modules enable ubuntu@www4250uj:/etc/metricbeat$ sudo metricbeat modules list Enabled: system Disabled: activemq aerospike airflow apache aws
- systemモジュールの設定 /etc/metricbeat/modules.d/system.yml デフォルトで diskio が無効なので有効化して、監視対象のデバイスを追加する
# Module: system # Docs: https://www.elastic.co/guide/en/beats/metricbeat/main/metricbeat-module-system.html - module: system period: 10s metricsets: - cpu - load - memory - network - process - process_summary - socket_summary #- entropy #- core - diskio #- socket #- service #- users process.include_top_n: by_cpu: 5 # include top 5 processes by CPU by_memory: 5 # include top 5 processes by memory diskio.include_devices: ["vda2"]
- Metricsbeat の設定反映
$ sudo metricbeat setup -e
- Metricsbeat の起動
$ sudo systemctl start metricbeat
- Dash Board のインストール
$ sudo metricbeat setup --dashboards
Kibana でグラフ化
- SSH の PortForward で、 5601 をポート転送
> ssh sakura -L5601:localhost:5601
- ブラウザ localhost:5601 の Dashboard > [Metricbeat System] Host overview ECS を見てみる
- いやいや、ぎりぎりやん。誰が計算資源使っとるん?
- Java は Elasticsearch と Kibana だよね
- 性能ログの収集と可視化のために、計算機資源の 40% 使うのはさすがに不毛なので、この計算機では Elastic Stack での計算機監視は無理ですね
Kibana の停止と、Elasticsearch のクリア
- Metricsbeat の停止
buntu@www4250uj:/etc/metricbeat$ sudo systemctl stop metricbeat ubuntu@www4250uj:/etc/metricbeat$ sudo systemctl disable metricbeat
- Elasticsearch のクリア
$ curl -X GET 'localhost:9200/_cat/indices?v' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open growi j6OJu9kqRy2rsWoCWxplwQ 1 1 55 4 1.8mb 1.8mb yellow open .ds-metricbeat-8.14.1-2024.06.22-000001 KNMyaf28RuyomL8v9Hbwog 1 1 296727 0 194.9mb 194.9mb $ curl -X DELETE 'localhost:9200/.ds-metricbeat-8.14.1-2024.06.22-000001'
なんか消せないけど、まぁいいか 200MBくらいゴミがあっても...
- docker-compose.yml で Kiban の記述を残して
docker compose down
をして、 docker-compose.yml で Kiban の関する記述を削ってから
docker compose up --force-recreate -d
- 結局振出しに戻った。メモリ利用率がガクンと下がって Webサーバの応答速度も元に戻った...
めでたしめでたし
本当はやりたかった Nginxのログ分析 に関するメモ
- さすがに メモリ 2GB のマシンで Elasticsarch をガンガン回すのは無理があったみたいなので、今回はここであきらめる
- 本当にやりたかったのは、Nginx のログを Elasticsearch に収集して、Kibana で分析すること
- 参考資料