質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

InfluxDB

InfluxDBは、InfluxDataによって開発された時系列データベースです。オープンソースであり、Go言語で記述されています。

Q&A

0回答

43閲覧

Windows版TelegrafでOPC UAサーバから1秒周期でデータを取得して、InfluxDB_v2へ書き込みたい

SNB53857

総合スコア8

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

InfluxDB

InfluxDBは、InfluxDataによって開発された時系列データベースです。オープンソースであり、Go言語で記述されています。

0グッド

0クリップ

投稿2024/11/18 00:13

実現したいこと

Windows版Telegrafを使って、たけびし製OPC UAサーバから1秒周期でデータを取得したうえでInfluxDB_v2へと書き込みを行いたい

発生している問題・分からないこと

Telegraf設定ファイルで以下の設定を行っているにもかかわらず、InfluxDB_v2には2~3秒周期でデータが書き込まれている

[agent]
interval = "1s"
collection_jitter = "0s"

TelegrafとInfluxDB_v2は同じサーバ上にセットアップ・構築している
たけびし製OPC UAサーバはネットワーク上の別のWindowsPC上に構築している
シミュレーション機能で1秒ごとに0~16まで値が変化するように設定している

該当のソースコード

Telegraf設定ファイル

1[global_tags] 2 3[agent] 4interval = "1s" 5 6round_interval = true 7 8metric_batch_size = 10000 9metric_buffer_limit = 20000 10 11 12## Collection jitter is used to jitter the collection by a random amount. 13collection_jitter = "0s" 14 15## Default flushing interval for all outputs. Maximum flush_interval will be 16## flush_interval + flush_jitter 17flush_interval = "5s" 18 19flush_jitter = "0s" 20 21## service input to set the timestamp at the appropriate precision. 22precision = "0s" 23 24## Log at debug level. 25debug = true 26## Log only error level messages. 27quiet = false 28 29logtarget = "file" 30logfile = "C:/Program Files/InfluxData/telegraf/logs/telegraf.log" 31logfile_rotation_interval = "24h" 32logfile_rotation_max_archives = 10 33 34hostname = "" 35omit_hostname = true 36 37############################################################################# 38# OUTPUT PLUGINS 39############################################################################# 40# Configuration for sending metrics to InfluxDB 2.0 41[[outputs.influxdb_v2]] 42urls = ["http://localhost:8086"] 43 44## Token for authentication. 45token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 46 47## Organization is the name of the organization you wish to write to. 48organization = "TESTOrg" 49 50## Destination bucket to write into. 51bucket = "TESTBucket" 52 53## Timeout for HTTP messages. 54#timeout = "5s" 55 56############################################################################# 57# INPUT PLUGINS 58############################################################################# 59 60# Retrieve data from OPCUA devices 61[[inputs.opcua]] 62name = "TEST" 63 64## OPC UA Endpoint URL 65endpoint = "opc.tcp://192.168.1.2:52240" 66 67## Maximum time allowed to establish a connect to the endpoint. 68connect_timeout = "10s" 69 70## Maximum time allowed for a request over the established connection. 71request_timeout = "5s" 72 73## Security policy, one of "None", "Basic128Rsa15", "Basic256", 74## "Basic256Sha256", or "auto" 75security_policy = "None" 76 77## Security mode, one of "None", "Sign", "SignAndEncrypt", or "auto" 78security_mode = "None" 79 80## Path to cert.pem. Required when security mode or policy isn't "None". 81## If cert path is not supplied, se-signed cert and key will be generated. 82certificate = "" 83 84## Path to private key.pem. Required when security mode or policy isn't "None". 85## If key path is not supplied, se-signed cert and key will be generated. 86private_key = "" 87 88## Authentication Method, one of "Certificate", "UserName", or "Anonymous". To 89## authenticate using a specific ID, select 'Certificate' or 'UserName' 90auth_method = "Anonymous" 91 92## Username. Required for auth_method = "UserName" 93# username = "" 94 95## Password. Required for auth_method = "UserName" 96# password = "" 97 98## Option to select the metric timestamp to use. Valid options are: 99## "gather" -- uses the time of receiving the data in telegraf 100## "server" -- uses the timestamp provided by the server 101## "source" -- uses the timestamp provided by the source 102timestamp = "source" 103 104#interval = "1s" 105 106## Node ID configuration 107## name - field name to use in the output 108## namespace - OPC UA namespace of the node (integer value 0 thru 3) 109## identifier_type - OPC UA ID type (s=string, i=numeric, g=guid, b=opaque) 110## identifier - OPC UA ID (tag as shown in opcua browser) 111## tags - extra tags to be added to the output metric (optional); deprecated in 1.25.0; use default_tags 112## default_tags - extra tags to be added to the output metric (optional) 113## Use either the inline notation or the bracketed notation, not both. 114## Inline notation (default_tags not supported yet) 115nodes = [ 116{name="0001", namespace="2", identifier_type="s", identifier="Tags.Tag_00000"}, 117{name="0002", namespace="2", identifier_type="s", identifier="Tags.Tag_00001"} 118]

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

実施したこと
・収集するOPC UAタグ数変更
当初は500点のOPC UAタグを設定していた
負荷がかかっている可能性を考慮して、タグ数を500→1点に変更してみたが同じ事象が発生した

・ほかのOPC UAクライアントソフトを実行
フリーソフト「UAExpert」をTelegraf・InfluxDB_v2がインストールされたWindowsPCへセットアップ
Telegrafで設定しているOPC UAタグと同じものを設定したところ、問題なく1秒周期で値の取得ができた
(データ取得時間を見ると、2024/11/18 10:00:01.052→2024/11/18 10:00:02.052のように、小数点以下の時刻が一致していることも確認できた)

・Telegraf→InfluxDB_v2への標準出力についてファイル出力設定追加
Telegraf設定ファイルに以下の設定を追加して、Telegraf→InfluxDB_v2への標準出力についてファイル出力を行うように設定した

<<追加した設定>>
[[outputs.file]]
files = ["C:\Program Files\InfluxData\Telegraf\Logs\stdout.log"]
data_format = "influx"

この状態で出力されたログは以下の通りだった

<<stdout.logの内容>>
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731405111000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731405111000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731405111000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 Quality="The operation succeeded. StatusGood (0x0)",0002=5i 1731405111000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731405111000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731405111000000000

末尾の数値がタイムスタンプと思われるが、これが連続していない
また、同じタイムスタンプと思わしきデータが複数記録されている

・タイムスタンプの取得先設定変更
Telegraf設定ファイルで以下の設定を変更してデータにつくタイムスタンプを変更
[[inputs.opcua]]

"gather" -- uses the time of receiving the data in telegraf

"server" -- uses the timestamp provided by the server

"source" -- uses the timestamp provided by the source

timestamp = "source"

1.timestamp = "source"

NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=3i,Quality="The operation succeeded. StatusGood (0x0)" 1731460886000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=3i,Quality="The operation succeeded. StatusGood (0x0)" 1731460886000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=3i,Quality="The operation succeeded. StatusGood (0x0)" 1731460886000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=3i,Quality="The operation succeeded. StatusGood (0x0)" 1731460886000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731460888000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731460888000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731460888000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731460888000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731460888000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=5i,Quality="The operation succeeded. StatusGood (0x0)" 1731460888000000000

stdoutを出力したファイルではタイムスタンプと思われる値が2秒ごとに記録されている

2.timestamp = "server"

NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=9i,Quality="The operation succeeded. StatusGood (0x0)" 1731459889000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=9i,Quality="The operation succeeded. StatusGood (0x0)" 1731459889000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=9i,Quality="The operation succeeded. StatusGood (0x0)" 1731459890000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=9i,Quality="The operation succeeded. StatusGood (0x0)" 1731459890000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=9i,Quality="The operation succeeded. StatusGood (0x0)" 1731459891000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=9i,Quality="The operation succeeded. StatusGood (0x0)" 1731459891000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=12i,Quality="The operation succeeded. StatusGood (0x0)" 1731459892000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=12i,Quality="The operation succeeded. StatusGood (0x0)" 1731459892000000000

stdoutを出力したファイルではタイムスタンプと思われる値が1秒ごとに記録されている

3.timestamp = "gather"

NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=13i,Quality="The operation succeeded. StatusGood (0x0)" 1731460437000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=13i,Quality="The operation succeeded. StatusGood (0x0)" 1731460437000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=13i,Quality="The operation succeeded. StatusGood (0x0)" 1731460438000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=13i,Quality="The operation succeeded. StatusGood (0x0)" 1731460438000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00000 0001=13i,Quality="The operation succeeded. StatusGood (0x0)" 1731460439000000000
NSGW1,id=ns=2;s=ManyTags.Tag_00001 0002=13i,Quality="The operation succeeded. StatusGood (0x0)" 1731460439000000000

stdoutを出力したファイルではタイムスタンプと思われる値が1秒ごとに記録されている

上記の通りstdoutに出力されたデータについて、設定「server」、「gather」では1秒ごととなったがInfluxDB_v2へ書き込まれたデータについてグラフで確認すると、1秒周期になっていないように見える
timestamp = "server"で書き込まれたデータをInfluxDB_v2のグラフ表示を行ったもの

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問