125 lines
2.8 KiB
Go
125 lines
2.8 KiB
Go
package jolokia2
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/influxdata/telegraf"
|
|
"github.com/influxdata/telegraf/internal/tls"
|
|
)
|
|
|
|
type JolokiaProxy struct {
|
|
DefaultFieldPrefix string
|
|
DefaultFieldSeparator string
|
|
DefaultTagPrefix string
|
|
|
|
URL string `toml:"url"`
|
|
DefaultTargetPassword string
|
|
DefaultTargetUsername string
|
|
Targets []JolokiaProxyTargetConfig `toml:"target"`
|
|
|
|
Username string
|
|
Password string
|
|
ResponseTimeout time.Duration `toml:"response_timeout"`
|
|
tls.ClientConfig
|
|
|
|
Metrics []MetricConfig `toml:"metric"`
|
|
client *Client
|
|
gatherer *Gatherer
|
|
}
|
|
|
|
type JolokiaProxyTargetConfig struct {
|
|
URL string `toml:"url"`
|
|
Username string
|
|
Password string
|
|
}
|
|
|
|
func (jp *JolokiaProxy) SampleConfig() string {
|
|
return `
|
|
# default_tag_prefix = ""
|
|
# default_field_prefix = ""
|
|
# default_field_separator = "."
|
|
|
|
## Proxy agent
|
|
url = "http://localhost:8080/jolokia"
|
|
# username = ""
|
|
# password = ""
|
|
# response_timeout = "5s"
|
|
|
|
## Optional TLS config
|
|
# tls_ca = "/var/private/ca.pem"
|
|
# tls_cert = "/var/private/client.pem"
|
|
# tls_key = "/var/private/client-key.pem"
|
|
# insecure_skip_verify = false
|
|
|
|
## Add proxy targets to query
|
|
# default_target_username = ""
|
|
# default_target_password = ""
|
|
[[inputs.jolokia2_proxy.target]]
|
|
url = "service:jmx:rmi:///jndi/rmi://targethost:9999/jmxrmi"
|
|
# username = ""
|
|
# password = ""
|
|
|
|
## Add metrics to read
|
|
[[inputs.jolokia2_proxy.metric]]
|
|
name = "java_runtime"
|
|
mbean = "java.lang:type=Runtime"
|
|
paths = ["Uptime"]
|
|
`
|
|
}
|
|
|
|
func (jp *JolokiaProxy) Description() string {
|
|
return "Read JMX metrics from a Jolokia REST proxy endpoint"
|
|
}
|
|
|
|
func (jp *JolokiaProxy) Gather(acc telegraf.Accumulator) error {
|
|
if jp.gatherer == nil {
|
|
jp.gatherer = NewGatherer(jp.createMetrics())
|
|
}
|
|
|
|
if jp.client == nil {
|
|
client, err := jp.createClient()
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
jp.client = client
|
|
}
|
|
|
|
return jp.gatherer.Gather(jp.client, acc)
|
|
}
|
|
|
|
func (jp *JolokiaProxy) createMetrics() []Metric {
|
|
var metrics []Metric
|
|
|
|
for _, config := range jp.Metrics {
|
|
metrics = append(metrics, NewMetric(config,
|
|
jp.DefaultFieldPrefix, jp.DefaultFieldSeparator, jp.DefaultTagPrefix))
|
|
}
|
|
|
|
return metrics
|
|
}
|
|
|
|
func (jp *JolokiaProxy) createClient() (*Client, error) {
|
|
proxyConfig := &ProxyConfig{
|
|
DefaultTargetUsername: jp.DefaultTargetUsername,
|
|
DefaultTargetPassword: jp.DefaultTargetPassword,
|
|
}
|
|
|
|
for _, target := range jp.Targets {
|
|
proxyConfig.Targets = append(proxyConfig.Targets, ProxyTargetConfig{
|
|
URL: target.URL,
|
|
Username: target.Username,
|
|
Password: target.Password,
|
|
})
|
|
}
|
|
|
|
return NewClient(jp.URL, &ClientConfig{
|
|
Username: jp.Username,
|
|
Password: jp.Password,
|
|
ResponseTimeout: jp.ResponseTimeout,
|
|
ClientConfig: jp.ClientConfig,
|
|
ProxyConfig: proxyConfig,
|
|
})
|
|
}
|