OpenTelemetry Collector + Elastic APM でシステム情報をKibanaで表示する(with Elasticreseach)

4 min read

こんにちは、無能です。
システム情報をGetするためにやってみた。
OpenTelemetoryを教えて頂いたことのきっかけと
❄️ NixOSとRaspberry Piで自宅server | Part 5 CPUの温度をmetricsとして取得
も見たので最終的にはCPU温度取得まで取得までいつかやりたいなあ・・・。
その途中経路としての道として、やってみる。

インストール

前回の記事でElasticresarchとkibanaは入れているので今回はOpenTelemetry CollectorElastic APMを入れてみます。
また、今回も毎度おなじみのSupervisorでデーモン管理しているので、記事通りに行けば誰でもうまくいくはず・・・。です。

と、その前にelasticユーザの設定をしていきます。

cd /usr/share/elasticsearch/
bin/elasticsearch-setup-passwords interactive

これで何個かelastic関係のユーザが作られるのでちゃんとパスワード設定しましょう。そしてvim /etc/elasticsearch/elasticsearch.yml

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

を追記しておきます。

さてようやくopentelemetry-collectorのインストールをしましょう。 以下から.debパッケージを持ってきます。   https://github.com/open-telemetry/opentelemetry-collector-releases/releases

wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.109.0/otelcol_0.109.0_linux_amd64.deb
sudo dpkg -i  otelcol_0.109.0_linux_amd64.deb 

次にElastic APM Serverをいれます。
https://www.elastic.co/guide/en/apm/server/7.15/setup-repositories.html

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo update-rc.d apm-server defaults 95 10

apm-serverの設定をしていきます。 vim /etc/apm-server/apm-server.yml

apm-server:
  host: "0.0.0.0:8200"
  protocol: "http"
  username: "elastic"
  password: "elasticユーザパス"
  rum:
    enabled: true
  ilm:
    enabled: "auto"
output.elasticsearch:
  username: "elastic"
  password: "elasticユーザパス"
instrumentation:
  enabled: true
setup.kibana:
  host: "kibana:5601"

今更だけど、この設定であってんのかなあ・・・。
そして、opentelemetry-collectorの設定。結構変えるので、一旦バックアップ後に編集。

sudo cp -p /etc/otelcol/config.yaml /etc/otelcol/bak.config.yaml
sudo vim /etc/otelcol/config.yaml
receivers:
  hostmetrics:
    collection_interval: 10s
    scrapers:
      cpu:
      memory:
      disk:
      filesystem:
      network:
      load:
      paging:

processors:
  batch:

exporters:
  otlp:
    endpoint: "localhost:8200"
    tls:
      insecure: true

service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [batch]
      exporters: [otlp]
  telemetry:
    logs:
      level: "info"
    metrics:
      level: "detailed"
      address: "0.0.0.0:8888"

特にツボったのがinsecure: trueのところで、ここいれないとどうやっても駄目だった。。。

一応、init.dにデーモンスクリプトは作られたがうまく動かないのでSupervisorで建てる。
commandのデーモン実行に関しては、ちゃんとwhichで確認して通るパスにしてください。

APM-Severはこれ sudo cat /etc/supervisor/conf.d/apm-server.conf

[program:apm-server]
command=/usr/bin/apm-server -e -c /etc/apm-server/apm-server.yml
autostart=true
autorestart=true
redirect_stderr=true
stderr_logfile=/var/log/apm-server/apm-server.error.log
stdout_logfile=/var/log/apm-server/apm-server.out.log
user=apm-server

opentelemetry-collectorはこれ
sudo cat /etc/supervisor/conf.d/otelcol.conf

[program:otelcol]
command=/usr/bin/otelcol --config /etc/otelcol/config.yaml
autostart=true
autorestart=true
stderr_logfile=/var/log/otelcol/otelcol.err.log
stdout_logfile=/var/log/otelcol/otelcol.out.log
user=otel 
environment=OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317"

OTEL_EXPORTER_OTLP_ENDPOINTに関して

Supervisorで適応させます。

sudo supervisorctl reread 
sudo supervisorctl update
sudo supervisorctl start apm-server
sudo supervisorctl start otelcol

また、念の為にElasticservicekibanaも再起動してください。

ブラウザのKibanaから確認

Image
正しくAPMサーバーと接続ができていればObservability -> APMから確認出来るはずです。
またAnalytics -> Dashboardからこんな感じに設定できます。
Image

躓いたのですが
Image
ここのTSVB
から
Image
ここを選択すれば表示されます。また表示おかしい時はチャートの部分触ると表示されるタイムスタンプ勝手に変わっちゃってしまうので右上の
Image
ここから時間軸を変えて見てください。
なんやかんや、ノリで触ったら半日消えました。
それではまた。
よろしくお願いします。(飲みに行ってサボってたから怒涛の3記事更新!)