PLCNEXT#Play with InfluxDB x telegraf

InfluxDBの第2話です。前回はDockerとInfluxdbの構築・あと実際Phoenix ContactのEdge PC EPC1522内蔵のInfluxとNode-Redの動作確認・そしてInfluxDBの基本コンセプトを説明しました。今回はtelegrafというPlug Inを紹介しようと思います。

よろしくお願いします!

Thanks!

今回の記事で使用するEPC1522エッジPCはフエニックス・コンタクトJapanが貸してくださったものです。誠にありがとうございます。

フエニックス・コンタクトは1923年ドイツで設立、全世界55拠点、20,300名の従業員が働くグローバル企業です。

“All Electric Society”のコンセプトで、すべての産業セクターで包括的に電動化、ネットワーク化、自動化の実現などのソリューションを提供していくことを掲げています。産業用生産設備、インフラ、エネルギー、電子機器の接続など様々な用途にフエニックス・コンタクトの製品が使用されています。

日本のフエニックス・コンタクト株式会社は1987年12月に、アジアで初の現地法人として横浜で設立され、現在は国内10営業拠点で事業を展開しています。

HPはこちらです。

https://www.phoenixcontact.com/ja-jp/

Reference Link

前回のLinkはここです↓

PLCNEXT#Play with Influxdb

Docker?

Dockerを紹介する前に、最初にDockerを使用する理由を話します。いままで開発者がローカルの開発環境で作ったアプリケーションがCloudや客の環境で動かないかもしれません。

その環境を再構築する必要がありますね。どこのお客様でも素早く、変動少なくでアプリケーションを稼働できるようにしたい。

でも開発者としては環境を再構築>そしてアプリケーションがOS・言語環境・バージョン様々な違うことでそのままうまく動かない場合が多いです。

ここで出てきたのはDockerです。DockerはLinuxのコンテナ技術を使ったもので、コンテナはHostのカーネルを利用し、プロセスやユーザなどを隔離することで、別のマシンが動いているかのように動かすことができます。軽量で高速に起動、停止などが可能です。

さらに、開発者が作成したDockerイメージを他の開発者に渡すと。

  • 各自の開発環境のVersion ずれ防ぐ
  • 開発環境を構築する時間が短くなる

よくあるのは開発環境を構築するときドキュメントの不足や構築の順番間違えなどのミスだけで一日以上かかることもよくあります。

Docker でInfluxdbを動かしてみたいなら、前回の記事を参考にしてください。

PLCNEXT#Play with Influxdb

Docker compose?

Docker Composeは複数のコンテナアプリケーションを定義や実行できるツールです。docker-composeというツールを使うことにより、構成記述File(.yaml)を使用し簡単に複数のコンテナを同時に立ち上げることができます。

Docker?Docker compose?

Dockerはコンテナを実行するEngineeで、操作するcommandはdocker command、一度一回だけのdockerの操作しかできません。

Docker composeはコンテナやアプリケーションを定義・実行するツールであり、操作するcommandはdocker compose、複数のコンテナを同時操作できます。さらに、docker composeはただ複数のコンテナを同時立ちあげ、操作できるだけではなく、コンテナ同士で内部通信に必要な”Network”と共有するデータ”Volume”も定義できます。そのために.yaml記述Fileが必要です。

例えば今回の記事ではinfluxdb とtelegrafを同時立ち上げ、telegrafはInfluxdbのPlug-inなのでinfluxdbとtelegraf 間は通信が必要になり、Docker composeツールを活用できます。

Installation

https://docs.docker.com/compose/install/linux/#install-using-the-repository

sudo apt-get update
sudo apt-get install docker-compose-plugin

sudo docker compose version

telegraf?

telegrafはOpen source server agentで他のシステム・センサー・Stacksからデータを簡単に収集することができます。telegrafはGO言語で実装され、データがSingle Binaryにコンパイルされ小さなデバイスにも使用できるようになります。

例えばOPCUA/MQTT/HTTP Listner/システムの状態/GITHUB、200種類以上のInput Pluginsがあります。TelegrafはNo Code/Low Codeで通信Driverなどを実装・Full stream Supoortもメリットあり。

Structure

こちらはtelegrafの簡単な構造図になります。

Data Resources

最初にどんなデータをInfluxdbに取り込みたいかを選択します。telegrafは200以上のPlug-inがあり、OPCUA、MQTTはもちろん、HTPPなど一般的なProtocolもSupportします。それでもなかった場合は、telegrafはOpen source なので自力でPluginを作ることも可能です。

Input Pliugsでは自分でTelegrafのConfiguration Fileを作成・構築する必要があります。

注意するのは各Plug-insにも自分だけのConfigurationがあります。

InputのFormatはJSON/CSV/XMLなどです。

Processor/Aggregators

INPUTから取ったデータをなにかの処理する場合があるかもしれません。例えばMatrixの計算やFilterなど。そのとき使えるのはProcess/AggregatorsのPluginsです。

Processor Plug-insはInput plugs-insから受信した生データ(Raw data)を変換・Filterし、Output-plugs-inに出力します。

Aggregators Plug-insはInput plugs-insやProcessorから受信した生データ(Raw data)を新しい集計データに変換し(Matrix計算など)、Output-plugs-inに出力します。

Outputs

最後にOutput-plugs-inはデータをLine Protocolから各種類のデータに変換し、Influxdbに出力します。そのデータは可視化・Alert・Taskなどで使用することが可能です。もちろん特徴はInput plugsinと似て、複数の出力を構築や複数のデータFormatもSupportします。

InfluxDB Line Protocol?

InfluxDB Line Protocol はテキストBaseで、InfluxDBデータベースにData Pointを書き込むためにあるProtocolです。そのInfluxDB Line Protocolにはいくつかの部品があります。

こちらはtelegraf Modubus PluginのInfluxDB Line Protocol Exampleです。

Work Flow Example

こちらはtelegrafの使用例になります。PublicのWeb SiteからJSONデータを取り、FileとInfluxDBに出力するまでのFlowです。

Inputs

Http Input plugsを使用し、Web SiteからJSON データを取得しJSON Parser Input Plug-insを使ってJSON データObjectをInfluxDB Line Protocolに変換します。

Processor

次はProcessor Plug-insを使用しUrl部分をpark_id=16に変換します。

Aggregators

さらにデータを加工します。

Outputs

最後はOutputs データをInfluxDB Output PluginsをInfluxDBに出力し、それ以外のデータをJSON FormatのFileに保存します。

Play with Docker First!

まずDockerから始めたいと思います。docker compose ツールをインストールしてください。

Directory Structure

こちらはDirectory の構成です。ssl/telegraf/dataはDocker composeするとき自動作成されるので気にしないでください。

Create the docker compose Directory

Folderを作ります。docker-compose.yml、influx2.env、telegraf.conf3日のテキストFileを作成します。

docker-compose.yml

このConfiguration を貼り付けます。

version: ‘3’
services:
  influxdb:
    image: influxdb:latest
    volumes:
      # Mount for influxdb data directory and configuration
      – ./data/influxdb2:/var/lib/influxdb2
      – ./data/influxdb2-config:/etc/influxdb2
    ports:
      – “8086:8086”
  telegraf:
    image: telegraf
    links:
      – influxdb
    volumes:
      – ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
      – /var/run/docker.sock:/var/run/docker.sock:ro
      – /sys:/rootfs/sys:ro
      – /proc:/rootfs/proc:ro
      – /etc:/rootfs/etc:ro
    env_file:
      – ./influxv2.env
    environment:
      – DOCKER_INFLUXDB_INIT_ORG=myorg
      – DOCKER_INFLUXDB_INIT_BUCKET=mybucket
      – DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=mytoken
    depends_on:
      – influxdb
volumes:
  influxdb2:

telegraf.conf

このConfiguration を貼り付けます。

[global_tags]

[agent]
  interval = “60s”
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = “0s”
  flush_interval = “10s”
  flush_jitter = “0s”
  precision = “”
  hostname = “”
  omit_hostname = false

[[outputs.influxdb_v2]]
  urls = [“http://influxdb:8086”]
  token = “my-super-secret-auth-token”
  organization = “my-org”
  bucket = “my-bucket”
  timeout = “5s”

[[inputs.ping]]
interval = “5s”
urls = [“google.com”, “amazon.com”, “github.com”]
count = 4
ping_interval = 1.0
timeout = 2.0

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false

[[inputs.disk]]
  ignore_fs = [“tmpfs”, “devtmpfs”, “devfs”, “iso9660”, “overlay”, “aufs”, “squashfs”]

[[inputs.diskio]]

[[inputs.kernel]]

[[inputs.mem]]

[[inputs.processes]]

[[inputs.swap]]

[[inputs.system]]

influx2.env

環境変数が格納されたFileなので、空きのままでよいです。

Run It

以下のコマンドでdocker compose を起動します。

Sudo docker compose up 

Terminal が出力されていますね。もうDocker composeが稼働しています。

-d OptionsでBackgroud走るようになります。

Sudo docker compose up -d

Check the status

以下のコマンドでdockerの状態を確認します。

sudo docker ps

influxdb telegraf2つのDockerもう稼働していますね!

Access the Influxdb

localhost:8086からinfluxdbのSeverをアクセスします。

Check the token

まずAPI Tokensを確認します。

いま構築されているTokenをクリックします。

もしtelegraf認証に問題があればAPI KEYを再確認してください。

Check the Data

Data Exploerを開き、_measurementから_fieldを選び、SUBMITします。

データが表示されているのであればもう正常でtelegraf がデータを取れ、しかもinfluxdbに出力してます。

Add Telegraf Configuration

CPUがMonitorできましたが、もう1つのTelegraf Input plug-inを追加してみましょう。

Load YOUR DATAをクリックします。

Internetを検索し>Internet Speedをクリックします。

ConfigurationをそのままCOPYし、telegraf.confに貼り付ければ、

Example OutputのようなInfluxDB Line ProtocolがInfluxDBに出力されるようになります。

Edit the telegraf.conf

先のtelegraf.confの最後にInternet speed input plug-inのConfigurationをCopyし、貼り付けましょう。

[global_tags]

[agent]
  interval = “60s”
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = “0s”
  flush_interval = “10s”
  flush_jitter = “0s”
  precision = “”
  hostname = “”
  omit_hostname = false

[[outputs.influxdb_v2]]
  urls = [“http://influxdb:8086”]
  token = “my-super-secret-auth-token”
  organization = “my-org”
  bucket = “my-bucket”
  timeout = “5s”

[[inputs.ping]]
interval = “5s”
urls = [“google.com”, “amazon.com”, “github.com”]
count = 4
ping_interval = 1.0
timeout = 2.0

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false

[[inputs.disk]]
  ignore_fs = [“tmpfs”, “devtmpfs”, “devfs”, “iso9660”, “overlay”, “aufs”, “squashfs”]

[[inputs.diskio]]

[[inputs.kernel]]

[[inputs.mem]]

[[inputs.processes]]

[[inputs.swap]]

[[inputs.system]]

[[inputs.internet_speed]]
  ## This plugin downloads many MB of data each time it is run. As such
  ## consider setting a higher interval for this plugin to reduce the
  ## demand on your internet connection.
  interval = “60m”

  ## Sets if runs file download test
  enable_file_download = false

  ## Caches the closest server location
  # cache = false

Stop it and Run again!

以下のコマンドdocker composeを一回停止し再起動しましょう。

sudo docker compose down

Internet_speedのデータもみえるようになりましたね!

Play with EPC1522!

次はPhoenix Contactに内蔵してるInfluxDBとTelegrafからも試してみましょう。

Access the InfluxDB dashboard

Web browserからhttps://yourIP:8086をアクセスします。

UsernameとPasswordを入力します。

Try to Load the data

まずDataを読み込んでみましょう。Load your data ボタンをクリックします。

Load Dataの画面に切り替えました。

Systemを検索し>Systemをクリックします。

System input plugin画面が表示しました。

Create Buckets

Bucketsを作成します。Buckets Tabを開き>Create Bucketsします。

Bucketsの名前入れ、Createします。

SystemというBucketsが作成されました。

Create Telegraf Configuration

次はTelegrafのConfigurationを作成します。TelegrafのTab開き>Create Configurationします。

Telegraf Configuration画面が表示されました。

BucketsではSystemを選びます。

次はSystemをクリックします。

緑がなればもう選ばれた状態で、Contiueで進みます。

このConfigurationでOKでしたら、Configuration名を入れてください。

Create and Verifyで進みます。

Test your Configurationの画面が出てきます。ここでまだFinishを押さないでください!

Copy the Telegraf Token

2. Configure API tokenのところで”Copy to Clipboard”をクリックします。

CopyされたTokenをNodepadなどで貼り付けて大事に保存してください。

Save the Telegraf Configuration

最後はFinishボタンでTelegraf Configurationを保存し、完成です。

Download the Telegraf Configuration

TelegrafのTabに先に先ほど追加した”systemEPC”のTelegraf Connection がありましたね。

systemEPCをクリックします。

Telegraf ConfigurationのFileが表示されます。

Edit – insecure skip verify

まずurlsの下に “insecure_skip_verify=true”を追加します。

Edit – API User Token

次は先程Copyした”token=xxxxxxxxxxxxxxxxxx”も貼り付けてください。

Save Changes

Save Changes でConfigurationを保存します。

Save!

次はConfigurationをDownloadします。

My Telegraf.config

それは実際私のConfiguration Fileです。

# Configuration for telegraf agent
[agent]
  ## Default data collection interval for all inputs
  interval = “10s”
  ## Rounds collection interval to ‘interval’
  ## ie, if interval=”10s” then always collect on :00, :10, :20, etc.
  round_interval = true

  ## Telegraf will send metrics to outputs in batches of at most
  ## metric_batch_size metrics.
  ## This controls the size of writes that Telegraf sends to output plugins.
  metric_batch_size = 1000

  ## For failed writes, telegraf will cache metric_buffer_limit metrics for each
  ## output, and will flush this buffer on a successful write. Oldest metrics
  ## are dropped first when this buffer fills.
  ## This buffer only fills when writes fail to output plugin(s).
  metric_buffer_limit = 10000

  ## Collection jitter is used to jitter the collection by a random amount.
  ## Each plugin will sleep for a random time within jitter before collecting.
  ## This can be used to avoid many plugins querying things like sysfs at the
  ## same time, which can have a measurable effect on the system.
  collection_jitter = “0s”

  ## Default flushing interval for all outputs. Maximum flush_interval will be
  ## flush_interval + flush_jitter
  flush_interval = “10s”
  ## Jitter the flush interval by a random amount. This is primarily to avoid
  ## large write spikes for users running a large number of telegraf instances.
  ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
  flush_jitter = “0s”

  ## By default or when set to “0s”, precision will be set to the same
  ## timestamp order as the collection interval, with the maximum being 1s.
  ##   ie, when interval = “10s”, precision will be “1s”
  ##       when interval = “250ms”, precision will be “1ms”
  ## Precision will NOT be used for service inputs. It is up to each individual
  ## service input to set the timestamp at the appropriate precision.
  ## Valid time units are “ns”, “us” (or “µs”), “ms”, “s”.
  precision = “”

  ## Logging configuration:
  ## Run telegraf with debug log messages.
  debug = false
  ## Run telegraf in quiet mode (error log messages only).
  quiet = false
  ## Specify the log file name. The empty string means to log to stderr.
  logfile = “”

  ## Override default hostname, if empty use os.Hostname()
  hostname = “”
  ## If set to true, do no set the “host” tag in the telegraf agent.
  omit_hostname = false
[[outputs.influxdb_v2]]
  ## The URLs of the InfluxDB cluster nodes.
  ##
  ## Multiple URLs can be specified for a single cluster, only ONE of the
  ## urls will be written to each interval.
  ## urls exp: http://127.0.0.1:8086
  urls = [“https://192.168.2.10:8086”]
  insecure_skip_verify=true
  ## Token for authentication.
  token = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”

  ## Organization is the name of the organization you wish to write to; must exist.
  organization = “soup01”

  ## Destination bucket to write into.
  bucket = “System”
[[inputs.cpu]]
  ## Whether to report per-cpu stats or not
  percpu = true
  ## Whether to report total system cpu stats or not
  totalcpu = true
  ## If true, collect raw CPU time metrics.
  collect_cpu_time = false
  ## If true, compute and report the sum of all non-idle CPU states.
  report_active = false
[[inputs.disk]]
  ## By default stats will be gathered for all mount points.
  ## Set mount_points will restrict the stats to only the specified mount points.
  # mount_points = [“/”]
  ## Ignore mount points by filesystem type.
  ignore_fs = [“tmpfs”, “devtmpfs”, “devfs”, “overlay”, “aufs”, “squashfs”]
[[inputs.diskio]]
[[inputs.mem]]
[[inputs.net]]
[[inputs.processes]]
[[inputs.swap]]
[[inputs.system]]

Transfer the Configuration file to EPC1522

Telegraf Configuration FileをEPC1522に転送します。WinSCPを立ち上げます。

もしやり方がわからない方では下記のTutorialを参考にしてください。

PLCNEXT#Use WInSCP And Login as Root
Beckhoff#TwinCAT BSD WinSCP

Login

New SessionでLoginします。

New Site>Host NameはEPC1522のIP、UesrnameとPasswordを入れ>Loginします。

Yesします。

Continueします。

Login成功しました。

Rename

先程Downloadしたsystemepc.confをRenameします。

telegraf.confに変更すればOKです。

Backup the Telegraf.config

/opt/plcnext/edge/telegraf/etc/telegraf/に移動し、

転送する前にもちろんEPC1522のConfigurationをBackupしてきます。

Transfer the file

telegraf.confをEPC1522の/opt/plcnext/edge/telegraf/etc/telegraf/に転送します。

完成です。

Check the Result

Restart the EPC1522

まずEPC1522の電源を入れ直してください。

Explore

https://yourEPC1522:8086にアクセスし、Exploreをクリックします。

SystemのBucketsを選びます。

いまDisckの空き容量を取得します。

お!データ見えましたね。

Configure your dashboard

最後はボーナスです。Boardsを開き>Systemをクリックします。

そこにSystemのBucketsにあるデータを一覧できます。

各Fieldにも小さなな歯車ついています。クリックしてみてください。

Configure をクリックします。

そこにFlux Scriptを変更すれば、自分だけの表示・Dashboardになります。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする