実現したいこと
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秒周期になっていないように見える
補足
特になし
あなたの回答
tips
プレビュー