fluent-plugin-opentelemetry 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.editorconfig +14 -0
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +30 -0
- data/README.md +50 -5
- data/Rakefile +4 -1
- data/TODO.md +4 -4
- data/lib/fluent/plugin/in_opentelemetry.rb +8 -2
- data/lib/fluent/plugin/in_opentelemetry_metrics.rb +333 -0
- data/lib/fluent/plugin/opentelemetry/grpc_input_handler.rb +10 -6
- data/lib/fluent/plugin/opentelemetry/grpc_output_handler.rb +20 -17
- data/lib/fluent/plugin/opentelemetry/http_input_handler.rb +20 -10
- data/lib/fluent/plugin/opentelemetry/http_output_handler.rb +36 -27
- data/lib/fluent/plugin/opentelemetry/request.rb +6 -6
- data/lib/fluent/plugin/opentelemetry/version.rb +9 -0
- data/lib/fluent/plugin/out_opentelemetry.rb +18 -10
- data/lib/opentelemetry/proto/collector/logs/v1/logs_service_pb.rb +1 -1
- data/lib/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.rb +1 -1
- data/lib/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.rb +2 -2
- data/lib/opentelemetry/proto/collector/trace/v1/trace_service_pb.rb +1 -1
- data/lib/opentelemetry/proto/common/v1/common_pb.rb +1 -1
- data/lib/opentelemetry/proto/logs/v1/logs_pb.rb +1 -1
- data/lib/opentelemetry/proto/metrics/v1/metrics_pb.rb +1 -1
- data/lib/opentelemetry/proto/profiles/v1development/profiles_pb.rb +5 -4
- data/lib/opentelemetry/proto/resource/v1/resource_pb.rb +1 -1
- data/lib/opentelemetry/proto/trace/v1/trace_pb.rb +1 -1
- metadata +33 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8f6154975d902432eeaefe60976cc6e1439d5a0cffcea2a38271a3b4bced9b7a
|
|
4
|
+
data.tar.gz: cfee50b70e200cbd90aa4e0b4f2f5d4809df91dda7ae89c9034a9b33e46b8b71
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 149b90626377df714c8b0df916187aa27f2769cb5d5bb9881463e06a90034ef29f25ee44b00ac1ea08d14fcc5ec9671f5fe1629de9a745fbe166b7211e19580c
|
|
7
|
+
data.tar.gz: c7d7cd3c01561c67bd5ef63fe973c31bc07cd556b5ae0f5ba7c424e250d4e2534f34bbea4b2f5c658027b0ebbd07c33a68ba7ffed9109dbe4ede8bbfc1034e88
|
data/.editorconfig
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs
|
|
2
|
+
# @see http://editorconfig.org
|
|
3
|
+
root = true
|
|
4
|
+
|
|
5
|
+
[*]
|
|
6
|
+
end_of_line = lf
|
|
7
|
+
charset = utf-8
|
|
8
|
+
trim_trailing_whitespace = true
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
indent_style = space
|
|
11
|
+
tab_width = 4
|
|
12
|
+
|
|
13
|
+
[*.{rb,yml,yaml,md,conf}]
|
|
14
|
+
indent_size = 2
|
data/.rubocop.yml
CHANGED
|
@@ -12,9 +12,12 @@ AllCops:
|
|
|
12
12
|
|
|
13
13
|
# rubocop-fluentd
|
|
14
14
|
Lint/FluentdPluginLogScope:
|
|
15
|
+
AssumeConfigLogLevel: 'info'
|
|
15
16
|
Enabled: true
|
|
16
17
|
Lint/FluentdPluginConfigParamDefaultTime:
|
|
17
18
|
Enabled: true
|
|
19
|
+
Lint/FluentdPluginIgnoreStandardError:
|
|
20
|
+
Enabled: true
|
|
18
21
|
Performance/FluentdPluginLogStringInterpolation:
|
|
19
22
|
Enabled: true
|
|
20
23
|
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.5.0] - 2026-02-01
|
|
4
|
+
|
|
5
|
+
Improvements:
|
|
6
|
+
|
|
7
|
+
- out_opentelemetry: add gRPC keep alive settings (#29)
|
|
8
|
+
- in_opentelemetry_metrics: add Fluentd CPU and memory usage metrics (#21)
|
|
9
|
+
- out_opentelemetry: reuse the connection in grpc (#19)
|
|
10
|
+
- out_opentelemetry: add timeout parameter in grpc (#18)
|
|
11
|
+
- out_opentelemetry: add compress parameter in grpc (#17)
|
|
12
|
+
- ProtocolBuffer: update OTLP v1.9.0
|
|
13
|
+
|
|
14
|
+
Fixes:
|
|
15
|
+
|
|
16
|
+
- out_opentelemetry: fix memory leak by explicitly consuming response body (#27)
|
|
17
|
+
- out_opentelemetry: Fix buffer handling to support buffered flush modes (#26)
|
|
18
|
+
- in_opentelemetry_metrics: add process id in CPU and memory usage
|
|
19
|
+
- in_opentelemetry: Ensure request body is closed to prevent socket leaks (#25)
|
|
20
|
+
- in_opentelemetry: fix "Errno::EMFILE: Too many open files" error by reusing connection (#23)
|
|
21
|
+
- in_opentelemetry: stop the grpc server explicitly
|
|
22
|
+
- http_output_handler: Fix HTTP response handling to accept all 2xx success status codes (#13)
|
|
23
|
+
|
|
24
|
+
Breaking Changes:
|
|
25
|
+
|
|
26
|
+
- in_opentelemetry_metrics: rename attribute key name with dot separation
|
|
27
|
+
- in_opentelemetry_metrics: rename metrics to use dot notation instead of underscores (#28)
|
|
28
|
+
|
|
29
|
+
## [0.4.0] - 2025-10-10
|
|
30
|
+
|
|
31
|
+
- in_opentelemetry_metrics: Add plugin to support fluentd metrics export (#10)
|
|
32
|
+
|
|
3
33
|
## [0.3.0] - 2025-07-23
|
|
4
34
|
|
|
5
35
|
- in_opentelemetry: add ${type} placeholder support in tag parameter (#8)
|
data/README.md
CHANGED
|
@@ -24,7 +24,7 @@ $ bundle
|
|
|
24
24
|
|
|
25
25
|
## Configuration
|
|
26
26
|
|
|
27
|
-
### Input plugin
|
|
27
|
+
### Input `opentelemetry` plugin
|
|
28
28
|
|
|
29
29
|
To receive data, this plugin requires `<http>` or `<grpc>` section, or both.
|
|
30
30
|
|
|
@@ -106,7 +106,45 @@ Refer [Config: Transport Section](https://docs.fluentd.org/configuration/transpo
|
|
|
106
106
|
</source>
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
-
###
|
|
109
|
+
### Input `opentelemetry_metrics` plugin
|
|
110
|
+
|
|
111
|
+
This plugin emits Fluentd's metric data that conforms to the OpenTelemetry Protocol.
|
|
112
|
+
To output the data, it requires to use output `opentelemetry` plugin.
|
|
113
|
+
|
|
114
|
+
#### Root section
|
|
115
|
+
|
|
116
|
+
| parameter | type | description | default |
|
|
117
|
+
|--------------------|--------|-------------------------------------------------------|-------------|
|
|
118
|
+
| tag | string | The tag of the event | required |
|
|
119
|
+
| emit_interval | time | Determine the rate to emit internal metrics as events | `60` |
|
|
120
|
+
| metric_name_prefix | string | The prefix of metric name | `fluentd.` |
|
|
121
|
+
|
|
122
|
+
#### Example
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
# Emit Fluentd metrics
|
|
126
|
+
<source>
|
|
127
|
+
@type opentelemetry_metrics
|
|
128
|
+
tag opentelemetry.fluentd.metrics
|
|
129
|
+
emit_interval 300s
|
|
130
|
+
</source>
|
|
131
|
+
|
|
132
|
+
# Send Fluentd metrics to OpenTelemetry Collector
|
|
133
|
+
<match opentelemetry.fluentd.metrics>
|
|
134
|
+
@type opentelemetry
|
|
135
|
+
|
|
136
|
+
<http>
|
|
137
|
+
endpoint "https://127.0.0.1:4318"
|
|
138
|
+
</http>
|
|
139
|
+
</match>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
> [!TIP]
|
|
143
|
+
> To visualize Fluentd CPU usage (`process_cpu_time`), use the `rate()` function since the CPU metric is reported as cumulative time (Counter).
|
|
144
|
+
>
|
|
145
|
+
> **PromQL Example:** `rate(fluentd_process_cpu_time_seconds_total[$__rate_interval])`
|
|
146
|
+
|
|
147
|
+
### Output `opentelemetry` plugin
|
|
110
148
|
|
|
111
149
|
To send data, this plugin requires `<http>` or `<grpc>` section.
|
|
112
150
|
|
|
@@ -136,9 +174,16 @@ It needs to install `grpc` gem manually to use this feature.
|
|
|
136
174
|
> [!WARNING]
|
|
137
175
|
> Now, gRPC feature status is experimental.
|
|
138
176
|
|
|
139
|
-
| parameter
|
|
140
|
-
|
|
141
|
-
| endpoint
|
|
177
|
+
| parameter | type | description | default |
|
|
178
|
+
|-------------------|---------|----------------------------------------------------------------------|------------------|
|
|
179
|
+
| endpoint | string | The endpoint for gRPC request | `127.0.0.1:4317` |
|
|
180
|
+
| timeout | integer | The maximum time (seconds) to wait a response from the server | `60` |
|
|
181
|
+
| keepalive_time | integer | The interval in seconds to send gRPC keepalive pings. | `30` |
|
|
182
|
+
| keepalive_timeout | integer | The timeout in seconds to wait for a keepalive ping acknowledgement. | `15` |
|
|
183
|
+
|
|
184
|
+
| parameter | type | description | available values | default |
|
|
185
|
+
|-----------|--------|-------------------------------------------|------------------|---------|
|
|
186
|
+
| compress | enum | The option to compress gRPC request body | `text` / `gzip` | `text` |
|
|
142
187
|
|
|
143
188
|
#### `<transport>` section
|
|
144
189
|
|
data/Rakefile
CHANGED
|
@@ -15,13 +15,16 @@ end
|
|
|
15
15
|
|
|
16
16
|
task default: :test
|
|
17
17
|
|
|
18
|
+
# Ref. https://github.com/open-telemetry/opentelemetry-proto/releases
|
|
19
|
+
OTLP_VERSION = "v1.9.0"
|
|
20
|
+
|
|
18
21
|
desc "Regenerate 'lib/opentelemetry'"
|
|
19
22
|
task :"regenerate:opentelemetry" do
|
|
20
23
|
lib_path = File.expand_path("lib/opentelemetry")
|
|
21
24
|
|
|
22
25
|
rm_rf lib_path
|
|
23
26
|
cd Dir.tmpdir do
|
|
24
|
-
sh "git clone https://github.com/open-telemetry/opentelemetry-proto.git
|
|
27
|
+
sh "git clone --depth 1 --branch #{OTLP_VERSION} https://github.com/open-telemetry/opentelemetry-proto.git"
|
|
25
28
|
cd "opentelemetry-proto" do
|
|
26
29
|
files = Dir.glob("opentelemetry/**/*.proto")
|
|
27
30
|
|
data/TODO.md
CHANGED
|
@@ -3,9 +3,9 @@ Ref. https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specif
|
|
|
3
3
|
|
|
4
4
|
# Protocol Details
|
|
5
5
|
## OTLP/gRPC
|
|
6
|
-
- [
|
|
7
|
-
- [
|
|
8
|
-
- [
|
|
6
|
+
- [x] [MUST] All server components MUST support the following transport compression options:
|
|
7
|
+
- [x] [MUST] No compression, denoted by none.
|
|
8
|
+
- [x] [MUST] Gzip compression, denoted by gzip.
|
|
9
9
|
|
|
10
10
|
### OTLP/gRPC Concurrent Requests
|
|
11
11
|
- [ ] [SHOULD] The implementations that need to achieve high throughput SHOULD support concurrent Unary calls to achieve higher throughput.
|
|
@@ -17,7 +17,7 @@ Ref. https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specif
|
|
|
17
17
|
- Full Success
|
|
18
18
|
- [x] [MUST] On success, the server response MUST be a Export<signal>ServiceResponse message.
|
|
19
19
|
- [x] [MUST] The server MUST leave the partial_success field unset in case of a successful response.
|
|
20
|
-
- [
|
|
20
|
+
- [x] [SHOULD] If the server receives an empty request the server SHOULD respond with success.
|
|
21
21
|
- Partial Success (NOTE: Currentry, it does not support partially accepting)
|
|
22
22
|
- [ ] [MUST] The server response MUST be the same Export<signal>ServiceResponse message as in the Full Success case.
|
|
23
23
|
- [ ] [MUST] The server MUST initialize the partial_success field, and it MUST set the respective rejected_spans, rejected_data_points, rejected_log_records or rejected_profiles field with the number of spans/data points/log records/profiles it rejected.
|
|
@@ -74,8 +74,8 @@ module Fluent::Plugin
|
|
|
74
74
|
|
|
75
75
|
if @grpc_config
|
|
76
76
|
thread_create(:in_opentelemetry_grpc_server) do
|
|
77
|
-
grpc_handler = Opentelemetry::GrpcInputHandler.new(@grpc_config, log)
|
|
78
|
-
grpc_handler.run(
|
|
77
|
+
@grpc_handler = Opentelemetry::GrpcInputHandler.new(@grpc_config, log)
|
|
78
|
+
@grpc_handler.run(
|
|
79
79
|
logs: lambda { |record|
|
|
80
80
|
router.emit(tag_for(Opentelemetry::RECORD_TYPE_LOGS), Fluent::EventTime.now, { "type" => Opentelemetry::RECORD_TYPE_LOGS, "message" => record })
|
|
81
81
|
},
|
|
@@ -90,6 +90,12 @@ module Fluent::Plugin
|
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
+
def stop
|
|
94
|
+
@grpc_handler&.stop
|
|
95
|
+
|
|
96
|
+
super
|
|
97
|
+
end
|
|
98
|
+
|
|
93
99
|
private
|
|
94
100
|
|
|
95
101
|
def expand_tag_placeholders(tag)
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "fluent/plugin/input"
|
|
4
|
+
require "fluent/plugin/opentelemetry/constant"
|
|
5
|
+
require "fluent/plugin/opentelemetry/version"
|
|
6
|
+
require "fluent/plugin_helper/timer"
|
|
7
|
+
require "fluent/version"
|
|
8
|
+
|
|
9
|
+
require "get_process_mem"
|
|
10
|
+
require "json"
|
|
11
|
+
require "socket"
|
|
12
|
+
|
|
13
|
+
module Fluent::Plugin
|
|
14
|
+
class OpentelemetryMetricsInput < Input
|
|
15
|
+
Fluent::Plugin.register_input("opentelemetry_metrics", self)
|
|
16
|
+
|
|
17
|
+
helpers :timer
|
|
18
|
+
|
|
19
|
+
desc "Determine the rate to emit internal metrics as events."
|
|
20
|
+
config_param :emit_interval, :time, default: 60
|
|
21
|
+
|
|
22
|
+
desc "The tag of the event."
|
|
23
|
+
config_param :tag, :string
|
|
24
|
+
|
|
25
|
+
desc "The prefix of metric name."
|
|
26
|
+
config_param :metric_name_prefix, :string, default: "fluentd."
|
|
27
|
+
|
|
28
|
+
def start
|
|
29
|
+
super
|
|
30
|
+
|
|
31
|
+
@metrics = Metrics.new(metric_name_prefix: @metric_name_prefix)
|
|
32
|
+
timer_execute(:in_opentelemetry_metrics, @emit_interval) do
|
|
33
|
+
router.emit(@tag, Fluent::EventTime.now, { "type" => Opentelemetry::RECORD_TYPE_METRICS, "message" => @metrics.record })
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
module Extension
|
|
38
|
+
refine Time do
|
|
39
|
+
def to_nano_sec
|
|
40
|
+
(to_i * 1_000_000_000) + nsec
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class Metrics
|
|
46
|
+
using Extension
|
|
47
|
+
|
|
48
|
+
def initialize(metric_name_prefix:)
|
|
49
|
+
@start_time_unix_nano = Time.now.to_nano_sec
|
|
50
|
+
@metric_name_prefix = metric_name_prefix.to_s
|
|
51
|
+
@hostname = Socket.gethostname
|
|
52
|
+
@monitor_info = MonitorInfo.new
|
|
53
|
+
@memory = GetProcessMem.new
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def record
|
|
57
|
+
values.to_json
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def values
|
|
61
|
+
metrics_data
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
def metrics_data
|
|
67
|
+
{
|
|
68
|
+
"resourceMetrics" => [
|
|
69
|
+
{
|
|
70
|
+
"resource" => {
|
|
71
|
+
"attributes" => [
|
|
72
|
+
string_value_attribute("service.name", "fluentd"),
|
|
73
|
+
string_value_attribute("service.version", Fluent::VERSION),
|
|
74
|
+
string_value_attribute("host.name", @hostname),
|
|
75
|
+
string_value_attribute("process.runtime.name", "ruby"),
|
|
76
|
+
string_value_attribute("process.runtime.version", RUBY_VERSION),
|
|
77
|
+
int_value_attribute("process.pid", Process.pid)
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"scopeMetrics" => scope_metrics
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def scope_metrics
|
|
87
|
+
[
|
|
88
|
+
{
|
|
89
|
+
"scope" => {
|
|
90
|
+
"name" => "fluent-plugin-opentelemetry",
|
|
91
|
+
"version" => Fluent::Plugin::Opentelemetry::VERSION
|
|
92
|
+
},
|
|
93
|
+
"metrics" => metrics
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def metrics
|
|
99
|
+
time_nano_sec = Time.now.to_nano_sec
|
|
100
|
+
metrics = []
|
|
101
|
+
|
|
102
|
+
@monitor_info.plugins_info_all.each do |record|
|
|
103
|
+
attributes = {
|
|
104
|
+
"plugin.id" => record["plugin_id"],
|
|
105
|
+
"plugin" => plugin_name(record["plugin_category"], record["type"]),
|
|
106
|
+
"plugin.category" => record["plugin_category"],
|
|
107
|
+
"plugin.type" => record["type"]
|
|
108
|
+
}.map { |k, v| string_value_attribute(k, v) }
|
|
109
|
+
|
|
110
|
+
record.each do |key, value|
|
|
111
|
+
next unless value.is_a?(Numeric)
|
|
112
|
+
|
|
113
|
+
metrics << {
|
|
114
|
+
"name" => replace_metrics_name_separator(@metric_name_prefix + key.to_s),
|
|
115
|
+
"unit" => "1",
|
|
116
|
+
# TODO: "description"
|
|
117
|
+
"gauge" => {
|
|
118
|
+
"dataPoints" => [
|
|
119
|
+
{
|
|
120
|
+
"startTimeUnixNano" => @start_time_unix_nano,
|
|
121
|
+
"timeUnixNano" => time_nano_sec,
|
|
122
|
+
"asDouble" => value,
|
|
123
|
+
"attributes" => attributes
|
|
124
|
+
}
|
|
125
|
+
]
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
metrics.concat(process_metrics(time_nano_sec))
|
|
131
|
+
|
|
132
|
+
metrics
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def process_metrics(time_nano_sec)
|
|
136
|
+
[
|
|
137
|
+
{
|
|
138
|
+
"name" => replace_metrics_name_separator(@metric_name_prefix + "process.memory.usage"),
|
|
139
|
+
"unit" => "By",
|
|
140
|
+
"gauge" => {
|
|
141
|
+
"dataPoints" => [
|
|
142
|
+
{
|
|
143
|
+
"startTimeUnixNano" => @start_time_unix_nano,
|
|
144
|
+
"timeUnixNano" => time_nano_sec,
|
|
145
|
+
"asInt" => @memory.bytes.to_i,
|
|
146
|
+
"attributes" => [
|
|
147
|
+
string_value_attribute("type", "resident"),
|
|
148
|
+
int_value_attribute("process.pid", Process.pid)
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name" => replace_metrics_name_separator(@metric_name_prefix + "process.cpu.time"),
|
|
156
|
+
"unit" => "s",
|
|
157
|
+
"sum" => {
|
|
158
|
+
"aggregationTemporality" => 2, # CUMULATIVE
|
|
159
|
+
"isMonotonic" => true,
|
|
160
|
+
"dataPoints" => [
|
|
161
|
+
{
|
|
162
|
+
"startTimeUnixNano" => @start_time_unix_nano,
|
|
163
|
+
"timeUnixNano" => time_nano_sec,
|
|
164
|
+
"asDouble" => Process.times.utime.to_f,
|
|
165
|
+
"attributes" => [
|
|
166
|
+
string_value_attribute("state", "user"),
|
|
167
|
+
int_value_attribute("process.pid", Process.pid)
|
|
168
|
+
]
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def plugin_name(category, type)
|
|
177
|
+
prefix =
|
|
178
|
+
case category
|
|
179
|
+
when "input"
|
|
180
|
+
"in"
|
|
181
|
+
when "output"
|
|
182
|
+
"out"
|
|
183
|
+
else
|
|
184
|
+
category
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
"#{prefix}_#{type}"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def string_value_attribute(key, value)
|
|
191
|
+
{
|
|
192
|
+
"key" => key.to_s,
|
|
193
|
+
"value" => {
|
|
194
|
+
"stringValue" => value.to_s
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def int_value_attribute(key, value)
|
|
200
|
+
{
|
|
201
|
+
"key" => key.to_s,
|
|
202
|
+
"value" => {
|
|
203
|
+
"intValue" => value
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def replace_metrics_name_separator(name)
|
|
209
|
+
name.tr("_", ".")
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# Imported from Fluent::Plugin::MonitorAgentInput
|
|
214
|
+
class MonitorInfo
|
|
215
|
+
# They are deprecated but remain for compatibiscripts/pluginslity
|
|
216
|
+
MONITOR_INFO = {
|
|
217
|
+
"output_plugin" => -> { is_a?(::Fluent::Plugin::Output) },
|
|
218
|
+
"buffer_queue_length" => lambda {
|
|
219
|
+
throw(:skip) unless instance_variable_defined?(:@buffer) && !@buffer.nil? && @buffer.is_a?(::Fluent::Plugin::Buffer)
|
|
220
|
+
@buffer.queue.size
|
|
221
|
+
},
|
|
222
|
+
"buffer_timekeys" => lambda {
|
|
223
|
+
throw(:skip) unless instance_variable_defined?(:@buffer) && !@buffer.nil? && @buffer.is_a?(::Fluent::Plugin::Buffer)
|
|
224
|
+
@buffer.timekeys
|
|
225
|
+
},
|
|
226
|
+
"buffer_total_queued_size" => lambda {
|
|
227
|
+
throw(:skip) unless instance_variable_defined?(:@buffer) && !@buffer.nil? && @buffer.is_a?(::Fluent::Plugin::Buffer)
|
|
228
|
+
@buffer.stage_size + @buffer.queue_size
|
|
229
|
+
},
|
|
230
|
+
"retry_count" => -> { respond_to?(:num_errors) ? num_errors : nil }
|
|
231
|
+
}.freeze
|
|
232
|
+
|
|
233
|
+
def all_plugins
|
|
234
|
+
array = []
|
|
235
|
+
|
|
236
|
+
# get all input plugins
|
|
237
|
+
array.concat Fluent::Engine.root_agent.inputs
|
|
238
|
+
|
|
239
|
+
# get all output plugins
|
|
240
|
+
array.concat Fluent::Engine.root_agent.outputs
|
|
241
|
+
|
|
242
|
+
# get all filter plugins
|
|
243
|
+
array.concat Fluent::Engine.root_agent.filters
|
|
244
|
+
|
|
245
|
+
Fluent::Engine.root_agent.labels.each_value do |l|
|
|
246
|
+
# TODO: Add label name to outputs / filters for identifying plugins
|
|
247
|
+
array.concat l.outputs
|
|
248
|
+
array.concat l.filters
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
array
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def plugin_category(pe)
|
|
255
|
+
case pe
|
|
256
|
+
when Fluent::Plugin::Input
|
|
257
|
+
"input"
|
|
258
|
+
when Fluent::Plugin::Output, Fluent::Plugin::MultiOutput, Fluent::Plugin::BareOutput
|
|
259
|
+
"output"
|
|
260
|
+
when Fluent::Plugin::Filter
|
|
261
|
+
"filter"
|
|
262
|
+
else
|
|
263
|
+
"unknown"
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def plugins_info_all(opts = {})
|
|
268
|
+
all_plugins.map do |pe|
|
|
269
|
+
get_monitor_info(pe, opts)
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
IGNORE_ATTRIBUTES = %i(@config_root_section @config @masked_config).freeze
|
|
274
|
+
|
|
275
|
+
# get monitor info from the plugin `pe` and return a hash object
|
|
276
|
+
def get_monitor_info(pe, opts = {})
|
|
277
|
+
obj = {}
|
|
278
|
+
|
|
279
|
+
# Common plugin information
|
|
280
|
+
obj["plugin_id"] = pe.plugin_id
|
|
281
|
+
obj["plugin_category"] = plugin_category(pe)
|
|
282
|
+
obj["type"] = pe.config["@type"]
|
|
283
|
+
obj["config"] = pe.config if opts[:with_config]
|
|
284
|
+
|
|
285
|
+
# run MONITOR_INFO in plugins' instance context and store the info to obj
|
|
286
|
+
MONITOR_INFO.each_pair do |key, code|
|
|
287
|
+
catch(:skip) do
|
|
288
|
+
obj[key] = pe.instance_exec(&code)
|
|
289
|
+
end
|
|
290
|
+
rescue NoMethodError => e
|
|
291
|
+
unless @first_warn
|
|
292
|
+
log.error "NoMethodError in monitoring plugins", key: key, plugin: pe.class, error: e
|
|
293
|
+
log.error_backtrace
|
|
294
|
+
@first_warn = true
|
|
295
|
+
end
|
|
296
|
+
rescue StandardError => e
|
|
297
|
+
log.warn "unexpected error in monitoring plugins", key: key, plugin: pe.class, error: e
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
if pe.respond_to?(:statistics)
|
|
301
|
+
obj.merge!(pe.statistics["output"] || {})
|
|
302
|
+
obj.merge!(pe.statistics["filter"] || {})
|
|
303
|
+
obj.merge!(pe.statistics["input"] || {})
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
obj["retry"] = get_retry_info(pe.retry) if opts[:with_retry] && pe.instance_variable_defined?(:@retry)
|
|
307
|
+
|
|
308
|
+
# include all instance variables if :with_debug_info is set
|
|
309
|
+
if opts[:with_debug_info]
|
|
310
|
+
iv = {}
|
|
311
|
+
pe.instance_eval do
|
|
312
|
+
instance_variables.each do |sym|
|
|
313
|
+
next if IGNORE_ATTRIBUTES.include?(sym)
|
|
314
|
+
|
|
315
|
+
key = sym.to_s[1..] # removes first '@'
|
|
316
|
+
iv[key] = instance_variable_get(sym)
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
obj["instance_variables"] = iv
|
|
320
|
+
elsif (ivars = opts[:ivars])
|
|
321
|
+
iv = {}
|
|
322
|
+
ivars.each do |name|
|
|
323
|
+
iname = "@#{name}"
|
|
324
|
+
iv[name] = pe.instance_variable_get(iname) if pe.instance_variable_defined?(iname)
|
|
325
|
+
end
|
|
326
|
+
obj["instance_variables"] = iv
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
obj
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
end
|
|
@@ -55,31 +55,35 @@ module Fluent::Plugin::Opentelemetry
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def run(logs:, metrics:, traces:)
|
|
58
|
-
server = GRPC::RpcServer.new(interceptors: [ExceptionInterceptor.new])
|
|
59
|
-
server.add_http2_port("#{@grpc_config.bind}:#{@grpc_config.port}", :this_port_is_insecure)
|
|
58
|
+
@server = GRPC::RpcServer.new(interceptors: [ExceptionInterceptor.new])
|
|
59
|
+
@server.add_http2_port("#{@grpc_config.bind}:#{@grpc_config.port}", :this_port_is_insecure)
|
|
60
60
|
|
|
61
61
|
logs_handler = ServiceHandler::Logs.new
|
|
62
62
|
logs_handler.callback = lambda { |request|
|
|
63
63
|
logs.call(request.to_json)
|
|
64
64
|
Fluent::Plugin::Opentelemetry::Response::Logs.build
|
|
65
65
|
}
|
|
66
|
-
server.handle(logs_handler)
|
|
66
|
+
@server.handle(logs_handler)
|
|
67
67
|
|
|
68
68
|
metrics_handler = ServiceHandler::Metrics.new
|
|
69
69
|
metrics_handler.callback = lambda { |request|
|
|
70
70
|
metrics.call(request.to_json)
|
|
71
71
|
Fluent::Plugin::Opentelemetry::Response::Metrics.build
|
|
72
72
|
}
|
|
73
|
-
server.handle(metrics_handler)
|
|
73
|
+
@server.handle(metrics_handler)
|
|
74
74
|
|
|
75
75
|
traces_handler = ServiceHandler::Traces.new
|
|
76
76
|
traces_handler.callback = lambda { |request|
|
|
77
77
|
traces.call(request.to_json)
|
|
78
78
|
Fluent::Plugin::Opentelemetry::Response::Traces.build
|
|
79
79
|
}
|
|
80
|
-
server.handle(traces_handler)
|
|
80
|
+
@server.handle(traces_handler)
|
|
81
81
|
|
|
82
|
-
server.run_till_terminated
|
|
82
|
+
@server.run_till_terminated
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def stop
|
|
86
|
+
@server.stop
|
|
83
87
|
end
|
|
84
88
|
end
|
|
85
89
|
end
|
|
@@ -17,9 +17,9 @@ class Fluent::Plugin::Opentelemetry::GrpcOutputHandler
|
|
|
17
17
|
@stub = Opentelemetry::Proto::Collector::Logs::V1::LogsService::Stub.new(host, creds, **kw)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
def export(json)
|
|
20
|
+
def export(json, **kw)
|
|
21
21
|
message = Opentelemetry::Proto::Collector::Logs::V1::ExportLogsServiceRequest.decode_json(json)
|
|
22
|
-
@stub.export(message)
|
|
22
|
+
@stub.export(message, **kw)
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -28,9 +28,9 @@ class Fluent::Plugin::Opentelemetry::GrpcOutputHandler
|
|
|
28
28
|
@stub = Opentelemetry::Proto::Collector::Metrics::V1::MetricsService::Stub.new(host, creds, **kw)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
def export(json)
|
|
31
|
+
def export(json, **kw)
|
|
32
32
|
message = Opentelemetry::Proto::Collector::Metrics::V1::ExportMetricsServiceRequest.decode_json(json)
|
|
33
|
-
@stub.export(message)
|
|
33
|
+
@stub.export(message, **kw)
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -39,9 +39,9 @@ class Fluent::Plugin::Opentelemetry::GrpcOutputHandler
|
|
|
39
39
|
@stub = Opentelemetry::Proto::Collector::Trace::V1::TraceService::Stub.new(host, creds, **kw)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
def export(json)
|
|
42
|
+
def export(json, **kw)
|
|
43
43
|
message = Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.decode_json(json)
|
|
44
|
-
@stub.export(message)
|
|
44
|
+
@stub.export(message, **kw)
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end
|
|
@@ -50,24 +50,27 @@ class Fluent::Plugin::Opentelemetry::GrpcOutputHandler
|
|
|
50
50
|
@grpc_config = grpc_config
|
|
51
51
|
@transport_config = transport_config
|
|
52
52
|
@logger = logger
|
|
53
|
+
|
|
54
|
+
channel_args = {}
|
|
55
|
+
channel_args = GRPC::Core::CompressionOptions.new({ default_algorithm: :gzip }).to_channel_arg_hash if @grpc_config.compress == :gzip
|
|
56
|
+
channel_args["grpc.keepalive_time_ms"] = grpc_config.keepalive_time * 1000
|
|
57
|
+
channel_args["grpc.keepalive_timeout_ms"] = grpc_config.keepalive_timeout * 1000
|
|
58
|
+
channel_args["grpc.keepalive_permit_without_calls"] = 1
|
|
59
|
+
@services = {
|
|
60
|
+
Fluent::Plugin::Opentelemetry::RECORD_TYPE_LOGS => ServiceStub::Logs.new(@grpc_config.endpoint, :this_channel_is_insecure, channel_args: channel_args),
|
|
61
|
+
Fluent::Plugin::Opentelemetry::RECORD_TYPE_METRICS => ServiceStub::Metrics.new(@grpc_config.endpoint, :this_channel_is_insecure, channel_args: channel_args),
|
|
62
|
+
Fluent::Plugin::Opentelemetry::RECORD_TYPE_TRACES => ServiceStub::Traces.new(@grpc_config.endpoint, :this_channel_is_insecure, channel_args: channel_args)
|
|
63
|
+
}
|
|
53
64
|
end
|
|
54
65
|
|
|
55
66
|
def export(record)
|
|
56
67
|
msg = record["message"]
|
|
57
68
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
case record["type"]
|
|
61
|
-
when Fluent::Plugin::Opentelemetry::RECORD_TYPE_LOGS
|
|
62
|
-
service = ServiceStub::Logs.new(@grpc_config.endpoint, credential)
|
|
63
|
-
when Fluent::Plugin::Opentelemetry::RECORD_TYPE_METRICS
|
|
64
|
-
service = ServiceStub::Metrics.new(@grpc_config.endpoint, credential)
|
|
65
|
-
when Fluent::Plugin::Opentelemetry::RECORD_TYPE_TRACES
|
|
66
|
-
service = ServiceStub::Traces.new(@grpc_config.endpoint, credential)
|
|
67
|
-
end
|
|
69
|
+
service = @services[record["type"]]
|
|
70
|
+
raise ::Fluent::UnrecoverableError, "got unknown record type '#{record['type']}'" unless service
|
|
68
71
|
|
|
69
72
|
begin
|
|
70
|
-
service.export(msg)
|
|
73
|
+
service.export(msg, deadline: Time.now + @grpc_config.timeout)
|
|
71
74
|
rescue Google::Protobuf::ParseError => e
|
|
72
75
|
# The message format does not comply with the OpenTelemetry protocol.
|
|
73
76
|
raise ::Fluent::UnrecoverableError, e.message
|
|
@@ -6,24 +6,32 @@ require "fluent/plugin/opentelemetry/response"
|
|
|
6
6
|
require "google/protobuf"
|
|
7
7
|
require "zlib"
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
module Fluent::PluginHelper::HttpServer
|
|
10
|
+
module Extension
|
|
11
|
+
refine Request do
|
|
12
|
+
# This API was introduced at fluentd v1.19.0.
|
|
13
|
+
# Ref. https://github.com/fluent/fluentd/pull/4903
|
|
14
|
+
# If we have supported v1.19.0+ only, we can remove this patch.
|
|
15
|
+
unless method_defined?(:headers)
|
|
16
16
|
def headers
|
|
17
17
|
@request.headers
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
# Workaround for fluentd v1.19.1 or earlier which does not close request body.
|
|
22
|
+
# Ref. https://github.com/fluent/fluentd/pull/5231
|
|
23
|
+
unless method_defined?(:close)
|
|
24
|
+
def close
|
|
25
|
+
@request.body&.close
|
|
26
|
+
end
|
|
27
|
+
end
|
|
20
28
|
end
|
|
21
29
|
end
|
|
22
|
-
|
|
23
|
-
using Fluent::PluginHelper::HttpServer::Extension
|
|
24
30
|
end
|
|
25
31
|
|
|
26
32
|
class Fluent::Plugin::Opentelemetry::HttpInputHandler
|
|
33
|
+
using Fluent::PluginHelper::HttpServer::Extension
|
|
34
|
+
|
|
27
35
|
def logs(req, &block)
|
|
28
36
|
common(req, Fluent::Plugin::Opentelemetry::Request::Logs, Fluent::Plugin::Opentelemetry::Response::Logs, &block)
|
|
29
37
|
end
|
|
@@ -41,10 +49,10 @@ class Fluent::Plugin::Opentelemetry::HttpInputHandler
|
|
|
41
49
|
def common(req, request_class, response_class)
|
|
42
50
|
content_type = req.headers["content-type"]
|
|
43
51
|
content_encoding = req.headers["content-encoding"]&.first
|
|
52
|
+
body = req.body
|
|
44
53
|
return response_unsupported_media_type unless valid_content_type?(content_type)
|
|
45
54
|
return response_bad_request(content_type) unless valid_content_encoding?(content_encoding)
|
|
46
55
|
|
|
47
|
-
body = req.body
|
|
48
56
|
body = Zlib::GzipReader.new(StringIO.new(body)).read if content_encoding == Fluent::Plugin::Opentelemetry::CONTENT_ENCODING_GZIP
|
|
49
57
|
|
|
50
58
|
begin
|
|
@@ -58,6 +66,8 @@ class Fluent::Plugin::Opentelemetry::HttpInputHandler
|
|
|
58
66
|
|
|
59
67
|
res = response_class.new
|
|
60
68
|
response(200, content_type, res.body(type: Fluent::Plugin::Opentelemetry::Response.type(content_type)))
|
|
69
|
+
ensure
|
|
70
|
+
req.close
|
|
61
71
|
end
|
|
62
72
|
|
|
63
73
|
def valid_content_type?(content_type)
|
|
@@ -14,40 +14,51 @@ class Fluent::Plugin::Opentelemetry::HttpOutputHandler
|
|
|
14
14
|
@transport_config = transport_config
|
|
15
15
|
@logger = logger
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
if
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
tls_settings = {}
|
|
18
|
+
if transport_config.protocol == :tls
|
|
19
|
+
tls_settings[:client_cert] = @transport_config.cert_path
|
|
20
|
+
tls_settings[:client_key] = @transport_config.private_key_path
|
|
21
|
+
tls_settings[:client_key_pass] = @transport_config.private_key_passphrase
|
|
22
|
+
tls_settings[:ssl_min_version] = Fluent::Plugin::Opentelemetry::TLS_VERSIONS_MAP[@transport_config.min_version]
|
|
23
|
+
tls_settings[:ssl_max_version] = Fluent::Plugin::Opentelemetry::TLS_VERSIONS_MAP[@transport_config.max_version]
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
timeout_settings = {
|
|
27
27
|
read_timeout: http_config.read_timeout,
|
|
28
28
|
write_timeout: http_config.write_timeout,
|
|
29
29
|
connect_timeout: http_config.connect_timeout
|
|
30
30
|
}
|
|
31
|
+
|
|
32
|
+
Excon.defaults[:ssl_verify_peer] = false if @transport_config.insecure
|
|
33
|
+
@connections = {
|
|
34
|
+
Fluent::Plugin::Opentelemetry::RECORD_TYPE_LOGS => Excon.new(http_logs_endpoint, proxy: @http_config.proxy, persistent: true, **tls_settings, **timeout_settings),
|
|
35
|
+
Fluent::Plugin::Opentelemetry::RECORD_TYPE_METRICS => Excon.new(http_metrics_endpoint, proxy: @http_config.proxy, persistent: true, **tls_settings, **timeout_settings),
|
|
36
|
+
Fluent::Plugin::Opentelemetry::RECORD_TYPE_TRACES => Excon.new(http_traces_endpoint, proxy: @http_config.proxy, persistent: true, **tls_settings, **timeout_settings)
|
|
37
|
+
}
|
|
31
38
|
end
|
|
32
39
|
|
|
33
40
|
def export(record)
|
|
34
|
-
uri,
|
|
35
|
-
response =
|
|
41
|
+
uri, headers, body = get_post_data(record)
|
|
42
|
+
response = @connections[record["type"]].post(body: body, headers: headers, idempotent: true)
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
raise Fluent::UnrecoverableError, "got unrecoverable error response from '#{uri}', response code is #{response.status}"
|
|
41
|
-
end
|
|
44
|
+
# Explicitly consume the response body to clear the socket buffer.
|
|
45
|
+
# Without this, Excon retains the buffer, causing memory leaks and blocking persistent connections.
|
|
46
|
+
response.body
|
|
42
47
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
return if response.status >= 200 && response.status < 300
|
|
49
|
+
|
|
50
|
+
if response.status == 400
|
|
51
|
+
# The client MUST NOT retry the request when it receives HTTP 400 Bad Request response.
|
|
52
|
+
raise Fluent::UnrecoverableError, "got unrecoverable error response from '#{uri}', response code is #{response.status}"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
if @http_config.retryable_response_codes&.include?(response.status)
|
|
56
|
+
raise Fluent::Plugin::OpentelemetryOutput::RetryableResponse, "got retryable error response from '#{uri}', response code is #{response.status}"
|
|
57
|
+
end
|
|
58
|
+
if @http_config.error_response_as_unrecoverable
|
|
59
|
+
raise Fluent::UnrecoverableError, "got unrecoverable error response from '#{uri}', response code is #{response.status}"
|
|
60
|
+
else
|
|
61
|
+
@logger.error "got error response from '#{uri}', response code is #{response.status}"
|
|
51
62
|
end
|
|
52
63
|
end
|
|
53
64
|
|
|
@@ -65,7 +76,7 @@ class Fluent::Plugin::Opentelemetry::HttpOutputHandler
|
|
|
65
76
|
"#{@http_config.endpoint}/v1/traces"
|
|
66
77
|
end
|
|
67
78
|
|
|
68
|
-
def
|
|
79
|
+
def get_post_data(record)
|
|
69
80
|
msg = record["message"]
|
|
70
81
|
|
|
71
82
|
begin
|
|
@@ -93,8 +104,6 @@ class Fluent::Plugin::Opentelemetry::HttpOutputHandler
|
|
|
93
104
|
body = gz.close.string
|
|
94
105
|
end
|
|
95
106
|
|
|
96
|
-
|
|
97
|
-
connection = Excon.new(uri, body: body, headers: headers, proxy: @http_config.proxy, persistent: true, **@tls_settings, **@timeout_settings)
|
|
98
|
-
[uri, connection]
|
|
107
|
+
[uri, headers, body]
|
|
99
108
|
end
|
|
100
109
|
end
|
|
@@ -9,10 +9,10 @@ require "google/protobuf"
|
|
|
9
9
|
|
|
10
10
|
class Fluent::Plugin::Opentelemetry::Request
|
|
11
11
|
class Logs
|
|
12
|
-
def initialize(body)
|
|
12
|
+
def initialize(body, ignore_unknown_fields: true)
|
|
13
13
|
@request =
|
|
14
14
|
if body.start_with?("{")
|
|
15
|
-
Opentelemetry::Proto::Collector::Logs::V1::ExportLogsServiceRequest.decode_json(body, ignore_unknown_fields:
|
|
15
|
+
Opentelemetry::Proto::Collector::Logs::V1::ExportLogsServiceRequest.decode_json(body, ignore_unknown_fields: ignore_unknown_fields)
|
|
16
16
|
else
|
|
17
17
|
Opentelemetry::Proto::Collector::Logs::V1::ExportLogsServiceRequest.decode(body)
|
|
18
18
|
end
|
|
@@ -28,10 +28,10 @@ class Fluent::Plugin::Opentelemetry::Request
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
class Metrics
|
|
31
|
-
def initialize(body)
|
|
31
|
+
def initialize(body, ignore_unknown_fields: true)
|
|
32
32
|
@request =
|
|
33
33
|
if body.start_with?("{")
|
|
34
|
-
Opentelemetry::Proto::Collector::Metrics::V1::ExportMetricsServiceRequest.decode_json(body, ignore_unknown_fields:
|
|
34
|
+
Opentelemetry::Proto::Collector::Metrics::V1::ExportMetricsServiceRequest.decode_json(body, ignore_unknown_fields: ignore_unknown_fields)
|
|
35
35
|
else
|
|
36
36
|
Opentelemetry::Proto::Collector::Metrics::V1::ExportMetricsServiceRequest.decode(body)
|
|
37
37
|
end
|
|
@@ -47,10 +47,10 @@ class Fluent::Plugin::Opentelemetry::Request
|
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
class Traces
|
|
50
|
-
def initialize(body)
|
|
50
|
+
def initialize(body, ignore_unknown_fields: true)
|
|
51
51
|
@request =
|
|
52
52
|
if body.start_with?("{")
|
|
53
|
-
Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.decode_json(body, ignore_unknown_fields:
|
|
53
|
+
Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.decode_json(body, ignore_unknown_fields: ignore_unknown_fields)
|
|
54
54
|
else
|
|
55
55
|
Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.decode(body)
|
|
56
56
|
end
|
|
@@ -50,6 +50,18 @@ module Fluent::Plugin
|
|
|
50
50
|
config_section :grpc, required: false, multi: false, init: false, param_name: :grpc_config do
|
|
51
51
|
desc "The endpoint"
|
|
52
52
|
config_param :endpoint, :string, default: "127.0.0.1:4317"
|
|
53
|
+
|
|
54
|
+
desc "Compress request body"
|
|
55
|
+
config_param :compress, :enum, list: %i[text gzip], default: :text
|
|
56
|
+
|
|
57
|
+
desc "The timeout in seconds"
|
|
58
|
+
config_param :timeout, :integer, default: 60
|
|
59
|
+
|
|
60
|
+
desc "The interval in seconds to send gRPC keepalive pings."
|
|
61
|
+
config_param :keepalive_time, :integer, default: 30
|
|
62
|
+
|
|
63
|
+
desc "The timeout in seconds to wait for a keepalive ping acknowledgement."
|
|
64
|
+
config_param :keepalive_timeout, :integer, default: 10
|
|
53
65
|
end
|
|
54
66
|
|
|
55
67
|
config_section :transport, required: false, multi: false, init: false, param_name: :transport_config do
|
|
@@ -75,17 +87,13 @@ module Fluent::Plugin
|
|
|
75
87
|
true
|
|
76
88
|
end
|
|
77
89
|
|
|
78
|
-
def format(tag, time, record)
|
|
79
|
-
JSON.generate(record)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
90
|
def write(chunk)
|
|
83
|
-
record
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
91
|
+
chunk.each do |_, record| # rubocop:disable Style/HashEachMethods
|
|
92
|
+
if @grpc_handler
|
|
93
|
+
@grpc_handler.export(record)
|
|
94
|
+
else
|
|
95
|
+
@http_handler.export(record)
|
|
96
|
+
end
|
|
89
97
|
end
|
|
90
98
|
end
|
|
91
99
|
end
|
|
@@ -9,7 +9,7 @@ require 'opentelemetry/proto/logs/v1/logs_pb'
|
|
|
9
9
|
|
|
10
10
|
descriptor_data = "\n8opentelemetry/proto/collector/logs/v1/logs_service.proto\x12%opentelemetry.proto.collector.logs.v1\x1a&opentelemetry/proto/logs/v1/logs.proto\"\\\n\x18\x45xportLogsServiceRequest\x12@\n\rresource_logs\x18\x01 \x03(\x0b\x32).opentelemetry.proto.logs.v1.ResourceLogs\"u\n\x19\x45xportLogsServiceResponse\x12X\n\x0fpartial_success\x18\x01 \x01(\x0b\x32?.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess\"O\n\x18\x45xportLogsPartialSuccess\x12\x1c\n\x14rejected_log_records\x18\x01 \x01(\x03\x12\x15\n\rerror_message\x18\x02 \x01(\t2\x9d\x01\n\x0bLogsService\x12\x8d\x01\n\x06\x45xport\x12?.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest\x1a@.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse\"\x00\x42\x98\x01\n(io.opentelemetry.proto.collector.logs.v1B\x10LogsServiceProtoP\x01Z0go.opentelemetry.io/proto/otlp/collector/logs/v1\xaa\x02%OpenTelemetry.Proto.Collector.Logs.V1b\x06proto3"
|
|
11
11
|
|
|
12
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
12
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
13
13
|
pool.add_serialized_file(descriptor_data)
|
|
14
14
|
|
|
15
15
|
module Opentelemetry
|
|
@@ -9,7 +9,7 @@ require 'opentelemetry/proto/metrics/v1/metrics_pb'
|
|
|
9
9
|
|
|
10
10
|
descriptor_data = "\n>opentelemetry/proto/collector/metrics/v1/metrics_service.proto\x12(opentelemetry.proto.collector.metrics.v1\x1a,opentelemetry/proto/metrics/v1/metrics.proto\"h\n\x1b\x45xportMetricsServiceRequest\x12I\n\x10resource_metrics\x18\x01 \x03(\x0b\x32/.opentelemetry.proto.metrics.v1.ResourceMetrics\"~\n\x1c\x45xportMetricsServiceResponse\x12^\n\x0fpartial_success\x18\x01 \x01(\x0b\x32\x45.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess\"R\n\x1b\x45xportMetricsPartialSuccess\x12\x1c\n\x14rejected_data_points\x18\x01 \x01(\x03\x12\x15\n\rerror_message\x18\x02 \x01(\t2\xac\x01\n\x0eMetricsService\x12\x99\x01\n\x06\x45xport\x12\x45.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest\x1a\x46.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse\"\x00\x42\xa4\x01\n+io.opentelemetry.proto.collector.metrics.v1B\x13MetricsServiceProtoP\x01Z3go.opentelemetry.io/proto/otlp/collector/metrics/v1\xaa\x02(OpenTelemetry.Proto.Collector.Metrics.V1b\x06proto3"
|
|
11
11
|
|
|
12
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
12
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
13
13
|
pool.add_serialized_file(descriptor_data)
|
|
14
14
|
|
|
15
15
|
module Opentelemetry
|
|
@@ -7,9 +7,9 @@ require 'google/protobuf'
|
|
|
7
7
|
require 'opentelemetry/proto/profiles/v1development/profiles_pb'
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
descriptor_data = "\nKopentelemetry/proto/collector/profiles/v1development/profiles_service.proto\x12\x34opentelemetry.proto.collector.profiles.v1development\x1a\x39opentelemetry/proto/profiles/v1development/profiles.proto\"
|
|
10
|
+
descriptor_data = "\nKopentelemetry/proto/collector/profiles/v1development/profiles_service.proto\x12\x34opentelemetry.proto.collector.profiles.v1development\x1a\x39opentelemetry/proto/profiles/v1development/profiles.proto\"\xcb\x01\n\x1c\x45xportProfilesServiceRequest\x12W\n\x11resource_profiles\x18\x01 \x03(\x0b\x32<.opentelemetry.proto.profiles.v1development.ResourceProfiles\x12R\n\ndictionary\x18\x02 \x01(\x0b\x32>.opentelemetry.proto.profiles.v1development.ProfilesDictionary\"\x8c\x01\n\x1d\x45xportProfilesServiceResponse\x12k\n\x0fpartial_success\x18\x01 \x01(\x0b\x32R.opentelemetry.proto.collector.profiles.v1development.ExportProfilesPartialSuccess\"P\n\x1c\x45xportProfilesPartialSuccess\x12\x19\n\x11rejected_profiles\x18\x01 \x01(\x03\x12\x15\n\rerror_message\x18\x02 \x01(\t2\xc7\x01\n\x0fProfilesService\x12\xb3\x01\n\x06\x45xport\x12R.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceRequest\x1aS.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceResponse\"\x00\x42\xc9\x01\n7io.opentelemetry.proto.collector.profiles.v1developmentB\x14ProfilesServiceProtoP\x01Z?go.opentelemetry.io/proto/otlp/collector/profiles/v1development\xaa\x02\x34OpenTelemetry.Proto.Collector.Profiles.V1Developmentb\x06proto3"
|
|
11
11
|
|
|
12
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
12
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
13
13
|
pool.add_serialized_file(descriptor_data)
|
|
14
14
|
|
|
15
15
|
module Opentelemetry
|
|
@@ -9,7 +9,7 @@ require 'opentelemetry/proto/trace/v1/trace_pb'
|
|
|
9
9
|
|
|
10
10
|
descriptor_data = "\n:opentelemetry/proto/collector/trace/v1/trace_service.proto\x12&opentelemetry.proto.collector.trace.v1\x1a(opentelemetry/proto/trace/v1/trace.proto\"`\n\x19\x45xportTraceServiceRequest\x12\x43\n\x0eresource_spans\x18\x01 \x03(\x0b\x32+.opentelemetry.proto.trace.v1.ResourceSpans\"x\n\x1a\x45xportTraceServiceResponse\x12Z\n\x0fpartial_success\x18\x01 \x01(\x0b\x32\x41.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess\"J\n\x19\x45xportTracePartialSuccess\x12\x16\n\x0erejected_spans\x18\x01 \x01(\x03\x12\x15\n\rerror_message\x18\x02 \x01(\t2\xa2\x01\n\x0cTraceService\x12\x91\x01\n\x06\x45xport\x12\x41.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest\x1a\x42.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse\"\x00\x42\x9c\x01\n)io.opentelemetry.proto.collector.trace.v1B\x11TraceServiceProtoP\x01Z1go.opentelemetry.io/proto/otlp/collector/trace/v1\xaa\x02&OpenTelemetry.Proto.Collector.Trace.V1b\x06proto3"
|
|
11
11
|
|
|
12
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
12
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
13
13
|
pool.add_serialized_file(descriptor_data)
|
|
14
14
|
|
|
15
15
|
module Opentelemetry
|
|
@@ -7,7 +7,7 @@ require 'google/protobuf'
|
|
|
7
7
|
|
|
8
8
|
descriptor_data = "\n*opentelemetry/proto/common/v1/common.proto\x12\x1dopentelemetry.proto.common.v1\"\x8c\x02\n\x08\x41nyValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x16\n\x0c\x64ouble_value\x18\x04 \x01(\x01H\x00\x12@\n\x0b\x61rray_value\x18\x05 \x01(\x0b\x32).opentelemetry.proto.common.v1.ArrayValueH\x00\x12\x43\n\x0ckvlist_value\x18\x06 \x01(\x0b\x32+.opentelemetry.proto.common.v1.KeyValueListH\x00\x12\x15\n\x0b\x62ytes_value\x18\x07 \x01(\x0cH\x00\x42\x07\n\x05value\"E\n\nArrayValue\x12\x37\n\x06values\x18\x01 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.AnyValue\"G\n\x0cKeyValueList\x12\x37\n\x06values\x18\x01 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\"O\n\x08KeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.opentelemetry.proto.common.v1.AnyValue\"\x94\x01\n\x14InstrumentationScope\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12;\n\nattributes\x18\x03 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x04 \x01(\r\"X\n\tEntityRef\x12\x12\n\nschema_url\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0f\n\x07id_keys\x18\x03 \x03(\t\x12\x18\n\x10\x64\x65scription_keys\x18\x04 \x03(\tB{\n io.opentelemetry.proto.common.v1B\x0b\x43ommonProtoP\x01Z(go.opentelemetry.io/proto/otlp/common/v1\xaa\x02\x1dOpenTelemetry.Proto.Common.V1b\x06proto3"
|
|
9
9
|
|
|
10
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
11
|
pool.add_serialized_file(descriptor_data)
|
|
12
12
|
|
|
13
13
|
module Opentelemetry
|
|
@@ -10,7 +10,7 @@ require 'opentelemetry/proto/resource/v1/resource_pb'
|
|
|
10
10
|
|
|
11
11
|
descriptor_data = "\n&opentelemetry/proto/logs/v1/logs.proto\x12\x1bopentelemetry.proto.logs.v1\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"L\n\x08LogsData\x12@\n\rresource_logs\x18\x01 \x03(\x0b\x32).opentelemetry.proto.logs.v1.ResourceLogs\"\xa3\x01\n\x0cResourceLogs\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12:\n\nscope_logs\x18\x02 \x03(\x0b\x32&.opentelemetry.proto.logs.v1.ScopeLogs\x12\x12\n\nschema_url\x18\x03 \x01(\tJ\x06\x08\xe8\x07\x10\xe9\x07\"\xa0\x01\n\tScopeLogs\x12\x42\n\x05scope\x18\x01 \x01(\x0b\x32\x33.opentelemetry.proto.common.v1.InstrumentationScope\x12;\n\x0blog_records\x18\x02 \x03(\x0b\x32&.opentelemetry.proto.logs.v1.LogRecord\x12\x12\n\nschema_url\x18\x03 \x01(\t\"\x83\x03\n\tLogRecord\x12\x16\n\x0etime_unix_nano\x18\x01 \x01(\x06\x12\x1f\n\x17observed_time_unix_nano\x18\x0b \x01(\x06\x12\x44\n\x0fseverity_number\x18\x02 \x01(\x0e\x32+.opentelemetry.proto.logs.v1.SeverityNumber\x12\x15\n\rseverity_text\x18\x03 \x01(\t\x12\x35\n\x04\x62ody\x18\x05 \x01(\x0b\x32\'.opentelemetry.proto.common.v1.AnyValue\x12;\n\nattributes\x18\x06 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x07 \x01(\r\x12\r\n\x05\x66lags\x18\x08 \x01(\x07\x12\x10\n\x08trace_id\x18\t \x01(\x0c\x12\x0f\n\x07span_id\x18\n \x01(\x0c\x12\x12\n\nevent_name\x18\x0c \x01(\tJ\x04\x08\x04\x10\x05*\xc3\x05\n\x0eSeverityNumber\x12\x1f\n\x1bSEVERITY_NUMBER_UNSPECIFIED\x10\x00\x12\x19\n\x15SEVERITY_NUMBER_TRACE\x10\x01\x12\x1a\n\x16SEVERITY_NUMBER_TRACE2\x10\x02\x12\x1a\n\x16SEVERITY_NUMBER_TRACE3\x10\x03\x12\x1a\n\x16SEVERITY_NUMBER_TRACE4\x10\x04\x12\x19\n\x15SEVERITY_NUMBER_DEBUG\x10\x05\x12\x1a\n\x16SEVERITY_NUMBER_DEBUG2\x10\x06\x12\x1a\n\x16SEVERITY_NUMBER_DEBUG3\x10\x07\x12\x1a\n\x16SEVERITY_NUMBER_DEBUG4\x10\x08\x12\x18\n\x14SEVERITY_NUMBER_INFO\x10\t\x12\x19\n\x15SEVERITY_NUMBER_INFO2\x10\n\x12\x19\n\x15SEVERITY_NUMBER_INFO3\x10\x0b\x12\x19\n\x15SEVERITY_NUMBER_INFO4\x10\x0c\x12\x18\n\x14SEVERITY_NUMBER_WARN\x10\r\x12\x19\n\x15SEVERITY_NUMBER_WARN2\x10\x0e\x12\x19\n\x15SEVERITY_NUMBER_WARN3\x10\x0f\x12\x19\n\x15SEVERITY_NUMBER_WARN4\x10\x10\x12\x19\n\x15SEVERITY_NUMBER_ERROR\x10\x11\x12\x1a\n\x16SEVERITY_NUMBER_ERROR2\x10\x12\x12\x1a\n\x16SEVERITY_NUMBER_ERROR3\x10\x13\x12\x1a\n\x16SEVERITY_NUMBER_ERROR4\x10\x14\x12\x19\n\x15SEVERITY_NUMBER_FATAL\x10\x15\x12\x1a\n\x16SEVERITY_NUMBER_FATAL2\x10\x16\x12\x1a\n\x16SEVERITY_NUMBER_FATAL3\x10\x17\x12\x1a\n\x16SEVERITY_NUMBER_FATAL4\x10\x18*Y\n\x0eLogRecordFlags\x12\x1f\n\x1bLOG_RECORD_FLAGS_DO_NOT_USE\x10\x00\x12&\n!LOG_RECORD_FLAGS_TRACE_FLAGS_MASK\x10\xff\x01\x42s\n\x1eio.opentelemetry.proto.logs.v1B\tLogsProtoP\x01Z&go.opentelemetry.io/proto/otlp/logs/v1\xaa\x02\x1bOpenTelemetry.Proto.Logs.V1b\x06proto3"
|
|
12
12
|
|
|
13
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
13
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
14
14
|
pool.add_serialized_file(descriptor_data)
|
|
15
15
|
|
|
16
16
|
module Opentelemetry
|
|
@@ -10,7 +10,7 @@ require 'opentelemetry/proto/resource/v1/resource_pb'
|
|
|
10
10
|
|
|
11
11
|
descriptor_data = "\n,opentelemetry/proto/metrics/v1/metrics.proto\x12\x1eopentelemetry.proto.metrics.v1\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"X\n\x0bMetricsData\x12I\n\x10resource_metrics\x18\x01 \x03(\x0b\x32/.opentelemetry.proto.metrics.v1.ResourceMetrics\"\xaf\x01\n\x0fResourceMetrics\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12\x43\n\rscope_metrics\x18\x02 \x03(\x0b\x32,.opentelemetry.proto.metrics.v1.ScopeMetrics\x12\x12\n\nschema_url\x18\x03 \x01(\tJ\x06\x08\xe8\x07\x10\xe9\x07\"\x9f\x01\n\x0cScopeMetrics\x12\x42\n\x05scope\x18\x01 \x01(\x0b\x32\x33.opentelemetry.proto.common.v1.InstrumentationScope\x12\x37\n\x07metrics\x18\x02 \x03(\x0b\x32&.opentelemetry.proto.metrics.v1.Metric\x12\x12\n\nschema_url\x18\x03 \x01(\t\"\xcd\x03\n\x06Metric\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\x36\n\x05gauge\x18\x05 \x01(\x0b\x32%.opentelemetry.proto.metrics.v1.GaugeH\x00\x12\x32\n\x03sum\x18\x07 \x01(\x0b\x32#.opentelemetry.proto.metrics.v1.SumH\x00\x12>\n\thistogram\x18\t \x01(\x0b\x32).opentelemetry.proto.metrics.v1.HistogramH\x00\x12U\n\x15\x65xponential_histogram\x18\n \x01(\x0b\x32\x34.opentelemetry.proto.metrics.v1.ExponentialHistogramH\x00\x12:\n\x07summary\x18\x0b \x01(\x0b\x32\'.opentelemetry.proto.metrics.v1.SummaryH\x00\x12\x39\n\x08metadata\x18\x0c \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValueB\x06\n\x04\x64\x61taJ\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x08\x10\t\"M\n\x05Gauge\x12\x44\n\x0b\x64\x61ta_points\x18\x01 \x03(\x0b\x32/.opentelemetry.proto.metrics.v1.NumberDataPoint\"\xba\x01\n\x03Sum\x12\x44\n\x0b\x64\x61ta_points\x18\x01 \x03(\x0b\x32/.opentelemetry.proto.metrics.v1.NumberDataPoint\x12W\n\x17\x61ggregation_temporality\x18\x02 \x01(\x0e\x32\x36.opentelemetry.proto.metrics.v1.AggregationTemporality\x12\x14\n\x0cis_monotonic\x18\x03 \x01(\x08\"\xad\x01\n\tHistogram\x12G\n\x0b\x64\x61ta_points\x18\x01 \x03(\x0b\x32\x32.opentelemetry.proto.metrics.v1.HistogramDataPoint\x12W\n\x17\x61ggregation_temporality\x18\x02 \x01(\x0e\x32\x36.opentelemetry.proto.metrics.v1.AggregationTemporality\"\xc3\x01\n\x14\x45xponentialHistogram\x12R\n\x0b\x64\x61ta_points\x18\x01 \x03(\x0b\x32=.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint\x12W\n\x17\x61ggregation_temporality\x18\x02 \x01(\x0e\x32\x36.opentelemetry.proto.metrics.v1.AggregationTemporality\"P\n\x07Summary\x12\x45\n\x0b\x64\x61ta_points\x18\x01 \x03(\x0b\x32\x30.opentelemetry.proto.metrics.v1.SummaryDataPoint\"\x86\x02\n\x0fNumberDataPoint\x12;\n\nattributes\x18\x07 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\x13\n\tas_double\x18\x04 \x01(\x01H\x00\x12\x10\n\x06\x61s_int\x18\x06 \x01(\x10H\x00\x12;\n\texemplars\x18\x05 \x03(\x0b\x32(.opentelemetry.proto.metrics.v1.Exemplar\x12\r\n\x05\x66lags\x18\x08 \x01(\rB\x07\n\x05valueJ\x04\x08\x01\x10\x02\"\xe6\x02\n\x12HistogramDataPoint\x12;\n\nattributes\x18\t \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05\x63ount\x18\x04 \x01(\x06\x12\x10\n\x03sum\x18\x05 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\rbucket_counts\x18\x06 \x03(\x06\x12\x17\n\x0f\x65xplicit_bounds\x18\x07 \x03(\x01\x12;\n\texemplars\x18\x08 \x03(\x0b\x32(.opentelemetry.proto.metrics.v1.Exemplar\x12\r\n\x05\x66lags\x18\n \x01(\r\x12\x10\n\x03min\x18\x0b \x01(\x01H\x01\x88\x01\x01\x12\x10\n\x03max\x18\x0c \x01(\x01H\x02\x88\x01\x01\x42\x06\n\x04_sumB\x06\n\x04_minB\x06\n\x04_maxJ\x04\x08\x01\x10\x02\"\xda\x04\n\x1d\x45xponentialHistogramDataPoint\x12;\n\nattributes\x18\x01 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05\x63ount\x18\x04 \x01(\x06\x12\x10\n\x03sum\x18\x05 \x01(\x01H\x00\x88\x01\x01\x12\r\n\x05scale\x18\x06 \x01(\x11\x12\x12\n\nzero_count\x18\x07 \x01(\x06\x12W\n\x08positive\x18\x08 \x01(\x0b\x32\x45.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets\x12W\n\x08negative\x18\t \x01(\x0b\x32\x45.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets\x12\r\n\x05\x66lags\x18\n \x01(\r\x12;\n\texemplars\x18\x0b \x03(\x0b\x32(.opentelemetry.proto.metrics.v1.Exemplar\x12\x10\n\x03min\x18\x0c \x01(\x01H\x01\x88\x01\x01\x12\x10\n\x03max\x18\r \x01(\x01H\x02\x88\x01\x01\x12\x16\n\x0ezero_threshold\x18\x0e \x01(\x01\x1a\x30\n\x07\x42uckets\x12\x0e\n\x06offset\x18\x01 \x01(\x11\x12\x15\n\rbucket_counts\x18\x02 \x03(\x04\x42\x06\n\x04_sumB\x06\n\x04_minB\x06\n\x04_max\"\xc5\x02\n\x10SummaryDataPoint\x12;\n\nattributes\x18\x07 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05\x63ount\x18\x04 \x01(\x06\x12\x0b\n\x03sum\x18\x05 \x01(\x01\x12Y\n\x0fquantile_values\x18\x06 \x03(\x0b\x32@.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile\x12\r\n\x05\x66lags\x18\x08 \x01(\r\x1a\x32\n\x0fValueAtQuantile\x12\x10\n\x08quantile\x18\x01 \x01(\x01\x12\r\n\x05value\x18\x02 \x01(\x01J\x04\x08\x01\x10\x02\"\xc1\x01\n\x08\x45xemplar\x12\x44\n\x13\x66iltered_attributes\x18\x07 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12\x16\n\x0etime_unix_nano\x18\x02 \x01(\x06\x12\x13\n\tas_double\x18\x03 \x01(\x01H\x00\x12\x10\n\x06\x61s_int\x18\x06 \x01(\x10H\x00\x12\x0f\n\x07span_id\x18\x04 \x01(\x0c\x12\x10\n\x08trace_id\x18\x05 \x01(\x0c\x42\x07\n\x05valueJ\x04\x08\x01\x10\x02*\x8c\x01\n\x16\x41ggregationTemporality\x12\'\n#AGGREGATION_TEMPORALITY_UNSPECIFIED\x10\x00\x12!\n\x1d\x41GGREGATION_TEMPORALITY_DELTA\x10\x01\x12&\n\"AGGREGATION_TEMPORALITY_CUMULATIVE\x10\x02*^\n\x0e\x44\x61taPointFlags\x12\x1f\n\x1b\x44\x41TA_POINT_FLAGS_DO_NOT_USE\x10\x00\x12+\n\'DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK\x10\x01\x42\x7f\n!io.opentelemetry.proto.metrics.v1B\x0cMetricsProtoP\x01Z)go.opentelemetry.io/proto/otlp/metrics/v1\xaa\x02\x1eOpenTelemetry.Proto.Metrics.V1b\x06proto3"
|
|
12
12
|
|
|
13
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
13
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
14
14
|
pool.add_serialized_file(descriptor_data)
|
|
15
15
|
|
|
16
16
|
module Opentelemetry
|
|
@@ -8,28 +8,29 @@ require 'opentelemetry/proto/common/v1/common_pb'
|
|
|
8
8
|
require 'opentelemetry/proto/resource/v1/resource_pb'
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
descriptor_data = "\n9opentelemetry/proto/profiles/v1development/profiles.proto\x12*opentelemetry.proto.profiles.v1development\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"
|
|
11
|
+
descriptor_data = "\n9opentelemetry/proto/profiles/v1development/profiles.proto\x12*opentelemetry.proto.profiles.v1development\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"\xf6\x03\n\x12ProfilesDictionary\x12J\n\rmapping_table\x18\x01 \x03(\x0b\x32\x33.opentelemetry.proto.profiles.v1development.Mapping\x12L\n\x0elocation_table\x18\x02 \x03(\x0b\x32\x34.opentelemetry.proto.profiles.v1development.Location\x12L\n\x0e\x66unction_table\x18\x03 \x03(\x0b\x32\x34.opentelemetry.proto.profiles.v1development.Function\x12\x44\n\nlink_table\x18\x04 \x03(\x0b\x32\x30.opentelemetry.proto.profiles.v1development.Link\x12\x14\n\x0cstring_table\x18\x05 \x03(\t\x12T\n\x0f\x61ttribute_table\x18\x06 \x03(\x0b\x32;.opentelemetry.proto.profiles.v1development.KeyValueAndUnit\x12\x46\n\x0bstack_table\x18\x07 \x03(\x0b\x32\x31.opentelemetry.proto.profiles.v1development.Stack\"\xbb\x01\n\x0cProfilesData\x12W\n\x11resource_profiles\x18\x01 \x03(\x0b\x32<.opentelemetry.proto.profiles.v1development.ResourceProfiles\x12R\n\ndictionary\x18\x02 \x01(\x0b\x32>.opentelemetry.proto.profiles.v1development.ProfilesDictionary\"\xbe\x01\n\x10ResourceProfiles\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12Q\n\x0escope_profiles\x18\x02 \x03(\x0b\x32\x39.opentelemetry.proto.profiles.v1development.ScopeProfiles\x12\x12\n\nschema_url\x18\x03 \x01(\tJ\x06\x08\xe8\x07\x10\xe9\x07\"\xae\x01\n\rScopeProfiles\x12\x42\n\x05scope\x18\x01 \x01(\x0b\x32\x33.opentelemetry.proto.common.v1.InstrumentationScope\x12\x45\n\x08profiles\x18\x02 \x03(\x0b\x32\x33.opentelemetry.proto.profiles.v1development.Profile\x12\x12\n\nschema_url\x18\x03 \x01(\t\"\xb1\x03\n\x07Profile\x12J\n\x0bsample_type\x18\x01 \x01(\x0b\x32\x35.opentelemetry.proto.profiles.v1development.ValueType\x12\x43\n\x07samples\x18\x02 \x03(\x0b\x32\x32.opentelemetry.proto.profiles.v1development.Sample\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\x15\n\rduration_nano\x18\x04 \x01(\x04\x12J\n\x0bperiod_type\x18\x05 \x01(\x0b\x32\x35.opentelemetry.proto.profiles.v1development.ValueType\x12\x0e\n\x06period\x18\x06 \x01(\x03\x12\x12\n\nprofile_id\x18\x07 \x01(\x0c\x12 \n\x18\x64ropped_attributes_count\x18\x08 \x01(\r\x12\x1f\n\x17original_payload_format\x18\t \x01(\t\x12\x18\n\x10original_payload\x18\n \x01(\x0c\x12\x19\n\x11\x61ttribute_indices\x18\x0b \x03(\x05\")\n\x04Link\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\"9\n\tValueType\x12\x15\n\rtype_strindex\x18\x01 \x01(\x05\x12\x15\n\runit_strindex\x18\x02 \x01(\x05\"z\n\x06Sample\x12\x13\n\x0bstack_index\x18\x01 \x01(\x05\x12\x0e\n\x06values\x18\x02 \x03(\x03\x12\x19\n\x11\x61ttribute_indices\x18\x03 \x03(\x05\x12\x12\n\nlink_index\x18\x04 \x01(\x05\x12\x1c\n\x14timestamps_unix_nano\x18\x05 \x03(\x06\"\x80\x01\n\x07Mapping\x12\x14\n\x0cmemory_start\x18\x01 \x01(\x04\x12\x14\n\x0cmemory_limit\x18\x02 \x01(\x04\x12\x13\n\x0b\x66ile_offset\x18\x03 \x01(\x04\x12\x19\n\x11\x66ilename_strindex\x18\x04 \x01(\x05\x12\x19\n\x11\x61ttribute_indices\x18\x05 \x03(\x05\"!\n\x05Stack\x12\x18\n\x10location_indices\x18\x01 \x03(\x05\"\x8e\x01\n\x08Location\x12\x15\n\rmapping_index\x18\x01 \x01(\x05\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\x04\x12?\n\x05lines\x18\x03 \x03(\x0b\x32\x30.opentelemetry.proto.profiles.v1development.Line\x12\x19\n\x11\x61ttribute_indices\x18\x04 \x03(\x05\"<\n\x04Line\x12\x16\n\x0e\x66unction_index\x18\x01 \x01(\x05\x12\x0c\n\x04line\x18\x02 \x01(\x03\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x03\"n\n\x08\x46unction\x12\x15\n\rname_strindex\x18\x01 \x01(\x05\x12\x1c\n\x14system_name_strindex\x18\x02 \x01(\x05\x12\x19\n\x11\x66ilename_strindex\x18\x03 \x01(\x05\x12\x12\n\nstart_line\x18\x04 \x01(\x03\"v\n\x0fKeyValueAndUnit\x12\x14\n\x0ckey_strindex\x18\x01 \x01(\x05\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.opentelemetry.proto.common.v1.AnyValue\x12\x15\n\runit_strindex\x18\x03 \x01(\x05\x42\xa4\x01\n-io.opentelemetry.proto.profiles.v1developmentB\rProfilesProtoP\x01Z5go.opentelemetry.io/proto/otlp/profiles/v1development\xaa\x02*OpenTelemetry.Proto.Profiles.V1Developmentb\x06proto3"
|
|
12
12
|
|
|
13
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
13
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
14
14
|
pool.add_serialized_file(descriptor_data)
|
|
15
15
|
|
|
16
16
|
module Opentelemetry
|
|
17
17
|
module Proto
|
|
18
18
|
module Profiles
|
|
19
19
|
module V1development
|
|
20
|
+
ProfilesDictionary = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.ProfilesDictionary").msgclass
|
|
20
21
|
ProfilesData = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.ProfilesData").msgclass
|
|
21
22
|
ResourceProfiles = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.ResourceProfiles").msgclass
|
|
22
23
|
ScopeProfiles = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.ScopeProfiles").msgclass
|
|
23
24
|
Profile = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.Profile").msgclass
|
|
24
|
-
AttributeUnit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.AttributeUnit").msgclass
|
|
25
25
|
Link = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.Link").msgclass
|
|
26
26
|
ValueType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.ValueType").msgclass
|
|
27
27
|
Sample = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.Sample").msgclass
|
|
28
28
|
Mapping = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.Mapping").msgclass
|
|
29
|
+
Stack = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.Stack").msgclass
|
|
29
30
|
Location = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.Location").msgclass
|
|
30
31
|
Line = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.Line").msgclass
|
|
31
32
|
Function = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.Function").msgclass
|
|
32
|
-
|
|
33
|
+
KeyValueAndUnit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("opentelemetry.proto.profiles.v1development.KeyValueAndUnit").msgclass
|
|
33
34
|
end
|
|
34
35
|
end
|
|
35
36
|
end
|
|
@@ -9,7 +9,7 @@ require 'opentelemetry/proto/common/v1/common_pb'
|
|
|
9
9
|
|
|
10
10
|
descriptor_data = "\n.opentelemetry/proto/resource/v1/resource.proto\x12\x1fopentelemetry.proto.resource.v1\x1a*opentelemetry/proto/common/v1/common.proto\"\xa8\x01\n\x08Resource\x12;\n\nattributes\x18\x01 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x02 \x01(\r\x12=\n\x0b\x65ntity_refs\x18\x03 \x03(\x0b\x32(.opentelemetry.proto.common.v1.EntityRefB\x83\x01\n\"io.opentelemetry.proto.resource.v1B\rResourceProtoP\x01Z*go.opentelemetry.io/proto/otlp/resource/v1\xaa\x02\x1fOpenTelemetry.Proto.Resource.V1b\x06proto3"
|
|
11
11
|
|
|
12
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
12
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
13
13
|
pool.add_serialized_file(descriptor_data)
|
|
14
14
|
|
|
15
15
|
module Opentelemetry
|
|
@@ -10,7 +10,7 @@ require 'opentelemetry/proto/resource/v1/resource_pb'
|
|
|
10
10
|
|
|
11
11
|
descriptor_data = "\n(opentelemetry/proto/trace/v1/trace.proto\x12\x1copentelemetry.proto.trace.v1\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"Q\n\nTracesData\x12\x43\n\x0eresource_spans\x18\x01 \x03(\x0b\x32+.opentelemetry.proto.trace.v1.ResourceSpans\"\xa7\x01\n\rResourceSpans\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12=\n\x0bscope_spans\x18\x02 \x03(\x0b\x32(.opentelemetry.proto.trace.v1.ScopeSpans\x12\x12\n\nschema_url\x18\x03 \x01(\tJ\x06\x08\xe8\x07\x10\xe9\x07\"\x97\x01\n\nScopeSpans\x12\x42\n\x05scope\x18\x01 \x01(\x0b\x32\x33.opentelemetry.proto.common.v1.InstrumentationScope\x12\x31\n\x05spans\x18\x02 \x03(\x0b\x32\".opentelemetry.proto.trace.v1.Span\x12\x12\n\nschema_url\x18\x03 \x01(\t\"\x84\x08\n\x04Span\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\x12\x13\n\x0btrace_state\x18\x03 \x01(\t\x12\x16\n\x0eparent_span_id\x18\x04 \x01(\x0c\x12\r\n\x05\x66lags\x18\x10 \x01(\x07\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x39\n\x04kind\x18\x06 \x01(\x0e\x32+.opentelemetry.proto.trace.v1.Span.SpanKind\x12\x1c\n\x14start_time_unix_nano\x18\x07 \x01(\x06\x12\x1a\n\x12\x65nd_time_unix_nano\x18\x08 \x01(\x06\x12;\n\nattributes\x18\t \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\n \x01(\r\x12\x38\n\x06\x65vents\x18\x0b \x03(\x0b\x32(.opentelemetry.proto.trace.v1.Span.Event\x12\x1c\n\x14\x64ropped_events_count\x18\x0c \x01(\r\x12\x36\n\x05links\x18\r \x03(\x0b\x32\'.opentelemetry.proto.trace.v1.Span.Link\x12\x1b\n\x13\x64ropped_links_count\x18\x0e \x01(\r\x12\x34\n\x06status\x18\x0f \x01(\x0b\x32$.opentelemetry.proto.trace.v1.Status\x1a\x8c\x01\n\x05\x45vent\x12\x16\n\x0etime_unix_nano\x18\x01 \x01(\x06\x12\x0c\n\x04name\x18\x02 \x01(\t\x12;\n\nattributes\x18\x03 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x04 \x01(\r\x1a\xac\x01\n\x04Link\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\x12\x13\n\x0btrace_state\x18\x03 \x01(\t\x12;\n\nattributes\x18\x04 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x05 \x01(\r\x12\r\n\x05\x66lags\x18\x06 \x01(\x07\"\x99\x01\n\x08SpanKind\x12\x19\n\x15SPAN_KIND_UNSPECIFIED\x10\x00\x12\x16\n\x12SPAN_KIND_INTERNAL\x10\x01\x12\x14\n\x10SPAN_KIND_SERVER\x10\x02\x12\x14\n\x10SPAN_KIND_CLIENT\x10\x03\x12\x16\n\x12SPAN_KIND_PRODUCER\x10\x04\x12\x16\n\x12SPAN_KIND_CONSUMER\x10\x05\"\xae\x01\n\x06Status\x12\x0f\n\x07message\x18\x02 \x01(\t\x12=\n\x04\x63ode\x18\x03 \x01(\x0e\x32/.opentelemetry.proto.trace.v1.Status.StatusCode\"N\n\nStatusCode\x12\x15\n\x11STATUS_CODE_UNSET\x10\x00\x12\x12\n\x0eSTATUS_CODE_OK\x10\x01\x12\x15\n\x11STATUS_CODE_ERROR\x10\x02J\x04\x08\x01\x10\x02*\x9c\x01\n\tSpanFlags\x12\x19\n\x15SPAN_FLAGS_DO_NOT_USE\x10\x00\x12 \n\x1bSPAN_FLAGS_TRACE_FLAGS_MASK\x10\xff\x01\x12*\n%SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK\x10\x80\x02\x12&\n!SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK\x10\x80\x04\x42w\n\x1fio.opentelemetry.proto.trace.v1B\nTraceProtoP\x01Z\'go.opentelemetry.io/proto/otlp/trace/v1\xaa\x02\x1cOpenTelemetry.Proto.Trace.V1b\x06proto3"
|
|
12
12
|
|
|
13
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
|
13
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
14
14
|
pool.add_serialized_file(descriptor_data)
|
|
15
15
|
|
|
16
16
|
module Opentelemetry
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fluent-plugin-opentelemetry
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Shizuo Fujita
|
|
@@ -51,6 +51,20 @@ dependencies:
|
|
|
51
51
|
- - "~>"
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '1.18'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: get_process_mem
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '1.0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '1.0'
|
|
54
68
|
- !ruby/object:Gem::Dependency
|
|
55
69
|
name: google-protobuf
|
|
56
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -65,6 +79,20 @@ dependencies:
|
|
|
65
79
|
- - "~>"
|
|
66
80
|
- !ruby/object:Gem::Version
|
|
67
81
|
version: '4.30'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: sys-proctable
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '1.3'
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '1.3'
|
|
68
96
|
description: Fluentd input/output plugin to forward OpenTelemetry Protocol data.
|
|
69
97
|
email:
|
|
70
98
|
- fujita@clear-code.com
|
|
@@ -72,6 +100,7 @@ executables: []
|
|
|
72
100
|
extensions: []
|
|
73
101
|
extra_rdoc_files: []
|
|
74
102
|
files:
|
|
103
|
+
- ".editorconfig"
|
|
75
104
|
- ".rubocop.yml"
|
|
76
105
|
- CHANGELOG.md
|
|
77
106
|
- LICENSE
|
|
@@ -79,6 +108,7 @@ files:
|
|
|
79
108
|
- Rakefile
|
|
80
109
|
- TODO.md
|
|
81
110
|
- lib/fluent/plugin/in_opentelemetry.rb
|
|
111
|
+
- lib/fluent/plugin/in_opentelemetry_metrics.rb
|
|
82
112
|
- lib/fluent/plugin/opentelemetry/constant.rb
|
|
83
113
|
- lib/fluent/plugin/opentelemetry/grpc_input_handler.rb
|
|
84
114
|
- lib/fluent/plugin/opentelemetry/grpc_output_handler.rb
|
|
@@ -86,6 +116,7 @@ files:
|
|
|
86
116
|
- lib/fluent/plugin/opentelemetry/http_output_handler.rb
|
|
87
117
|
- lib/fluent/plugin/opentelemetry/request.rb
|
|
88
118
|
- lib/fluent/plugin/opentelemetry/response.rb
|
|
119
|
+
- lib/fluent/plugin/opentelemetry/version.rb
|
|
89
120
|
- lib/fluent/plugin/out_opentelemetry.rb
|
|
90
121
|
- lib/opentelemetry/proto/collector/logs/v1/logs_service_pb.rb
|
|
91
122
|
- lib/opentelemetry/proto/collector/logs/v1/logs_service_services_pb.rb
|
|
@@ -122,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
122
153
|
- !ruby/object:Gem::Version
|
|
123
154
|
version: '0'
|
|
124
155
|
requirements: []
|
|
125
|
-
rubygems_version:
|
|
156
|
+
rubygems_version: 4.0.4
|
|
126
157
|
specification_version: 4
|
|
127
158
|
summary: Fluentd input/output plugin to forward OpenTelemetry Protocol data.
|
|
128
159
|
test_files: []
|