Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ddcb93188f | ||
|
|
cb193d0e8a | ||
|
|
600f9fa067 | ||
|
|
4cedae9d2c | ||
|
|
4c8e8fc2f1 | ||
|
|
7c5bcfe84e | ||
|
|
efa20d05fa | ||
|
|
187c7e12a8 | ||
|
|
f29a994743 | ||
|
|
f416f429d7 | ||
|
|
ec6b1aae94 |
@@ -1,3 +1,11 @@
|
|||||||
|
## v1.4.4 [2017-11-08]
|
||||||
|
|
||||||
|
- [#3401](https://github.com/influxdata/telegraf/pull/3401): Use schema specified in mqtt_consumer input.
|
||||||
|
- [#3419](https://github.com/influxdata/telegraf/issues/3419): Redact datadog API key in log output.
|
||||||
|
- [#3311](https://github.com/influxdata/telegraf/issues/3311): Fix error getting pids in netstat input.
|
||||||
|
- [#3339](https://github.com/influxdata/telegraf/issues/3339): Support HOST_VAR envvar to locate /var in system input.
|
||||||
|
- [#3383](https://github.com/influxdata/telegraf/issues/3383): Use current time if docker container read time is zero value.
|
||||||
|
|
||||||
## v1.4.3 [2017-10-25]
|
## v1.4.3 [2017-10-25]
|
||||||
|
|
||||||
### Bugfixes
|
### Bugfixes
|
||||||
|
|||||||
2
Godeps
2
Godeps
@@ -60,7 +60,7 @@ github.com/prometheus/procfs 1878d9fbb537119d24b21ca07effd591627cd160
|
|||||||
github.com/rcrowley/go-metrics 1f30fe9094a513ce4c700b9a54458bbb0c96996c
|
github.com/rcrowley/go-metrics 1f30fe9094a513ce4c700b9a54458bbb0c96996c
|
||||||
github.com/samuel/go-zookeeper 1d7be4effb13d2d908342d349d71a284a7542693
|
github.com/samuel/go-zookeeper 1d7be4effb13d2d908342d349d71a284a7542693
|
||||||
github.com/satori/go.uuid 5bf94b69c6b68ee1b541973bb8e1144db23a194b
|
github.com/satori/go.uuid 5bf94b69c6b68ee1b541973bb8e1144db23a194b
|
||||||
github.com/shirou/gopsutil 9a4a9167ad3b4355dbf1c2c7a0f5f0d3fb1e9ab9
|
github.com/shirou/gopsutil 48fc5612898a1213aa5d6a0fb2d4f7b968e898fb
|
||||||
github.com/shirou/w32 3c9377fc6748f222729a8270fe2775d149a249ad
|
github.com/shirou/w32 3c9377fc6748f222729a8270fe2775d149a249ad
|
||||||
github.com/Shopify/sarama c01858abb625b73a3af51d0798e4ad42c8147093
|
github.com/Shopify/sarama c01858abb625b73a3af51d0798e4ad42c8147093
|
||||||
github.com/Sirupsen/logrus 61e43dc76f7ee59a82bdf3d71033dc12bea4c77d
|
github.com/Sirupsen/logrus 61e43dc76f7ee59a82bdf3d71033dc12bea4c77d
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
machine:
|
machine:
|
||||||
go:
|
|
||||||
version: 1.8.1
|
|
||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
- memcached
|
- memcached
|
||||||
- redis
|
- redis
|
||||||
- rabbitmq-server
|
- rabbitmq-server
|
||||||
|
post:
|
||||||
|
- sudo rm -rf /usr/local/go
|
||||||
|
- wget https://storage.googleapis.com/golang/go1.8.4.linux-amd64.tar.gz
|
||||||
|
- sudo tar -C /usr/local -xzf go1.8.4.linux-amd64.tar.gz
|
||||||
|
- go version
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
override:
|
override:
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ func TestNewMetric(t *testing.T) {
|
|||||||
assert.Equal(t, tags, m.Tags())
|
assert.Equal(t, tags, m.Tags())
|
||||||
assert.Equal(t, fields, m.Fields())
|
assert.Equal(t, fields, m.Fields())
|
||||||
assert.Equal(t, "cpu", m.Name())
|
assert.Equal(t, "cpu", m.Name())
|
||||||
assert.Equal(t, now, m.Time())
|
assert.Equal(t, now.UnixNano(), m.Time().UnixNano())
|
||||||
assert.Equal(t, now.UnixNano(), m.UnixNano())
|
assert.Equal(t, now.UnixNano(), m.UnixNano())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -414,7 +414,7 @@ func TestNewGaugeMetric(t *testing.T) {
|
|||||||
assert.Equal(t, tags, m.Tags())
|
assert.Equal(t, tags, m.Tags())
|
||||||
assert.Equal(t, fields, m.Fields())
|
assert.Equal(t, fields, m.Fields())
|
||||||
assert.Equal(t, "cpu", m.Name())
|
assert.Equal(t, "cpu", m.Name())
|
||||||
assert.Equal(t, now, m.Time())
|
assert.Equal(t, now.UnixNano(), m.Time().UnixNano())
|
||||||
assert.Equal(t, now.UnixNano(), m.UnixNano())
|
assert.Equal(t, now.UnixNano(), m.UnixNano())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,7 +436,7 @@ func TestNewCounterMetric(t *testing.T) {
|
|||||||
assert.Equal(t, tags, m.Tags())
|
assert.Equal(t, tags, m.Tags())
|
||||||
assert.Equal(t, fields, m.Fields())
|
assert.Equal(t, fields, m.Fields())
|
||||||
assert.Equal(t, "cpu", m.Name())
|
assert.Equal(t, "cpu", m.Name())
|
||||||
assert.Equal(t, now, m.Time())
|
assert.Equal(t, now.UnixNano(), m.Time().UnixNano())
|
||||||
assert.Equal(t, now.UnixNano(), m.UnixNano())
|
assert.Equal(t, now.UnixNano(), m.UnixNano())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -339,7 +339,11 @@ func gatherContainerStats(
|
|||||||
total bool,
|
total bool,
|
||||||
daemonOSType string,
|
daemonOSType string,
|
||||||
) {
|
) {
|
||||||
now := stat.Read
|
tm := stat.Read
|
||||||
|
|
||||||
|
if tm.Before(time.Unix(0, 0)) {
|
||||||
|
tm = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
memfields := map[string]interface{}{
|
memfields := map[string]interface{}{
|
||||||
"container_id": id,
|
"container_id": id,
|
||||||
@@ -399,7 +403,7 @@ func gatherContainerStats(
|
|||||||
memfields["private_working_set"] = stat.MemoryStats.PrivateWorkingSet
|
memfields["private_working_set"] = stat.MemoryStats.PrivateWorkingSet
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.AddFields("docker_container_mem", memfields, tags, now)
|
acc.AddFields("docker_container_mem", memfields, tags, tm)
|
||||||
|
|
||||||
cpufields := map[string]interface{}{
|
cpufields := map[string]interface{}{
|
||||||
"usage_total": stat.CPUStats.CPUUsage.TotalUsage,
|
"usage_total": stat.CPUStats.CPUUsage.TotalUsage,
|
||||||
@@ -424,7 +428,7 @@ func gatherContainerStats(
|
|||||||
|
|
||||||
cputags := copyTags(tags)
|
cputags := copyTags(tags)
|
||||||
cputags["cpu"] = "cpu-total"
|
cputags["cpu"] = "cpu-total"
|
||||||
acc.AddFields("docker_container_cpu", cpufields, cputags, now)
|
acc.AddFields("docker_container_cpu", cpufields, cputags, tm)
|
||||||
|
|
||||||
// If we have OnlineCPUs field, then use it to restrict stats gathering to only Online CPUs
|
// If we have OnlineCPUs field, then use it to restrict stats gathering to only Online CPUs
|
||||||
// (https://github.com/moby/moby/commit/115f91d7575d6de6c7781a96a082f144fd17e400)
|
// (https://github.com/moby/moby/commit/115f91d7575d6de6c7781a96a082f144fd17e400)
|
||||||
@@ -442,7 +446,7 @@ func gatherContainerStats(
|
|||||||
"usage_total": percpu,
|
"usage_total": percpu,
|
||||||
"container_id": id,
|
"container_id": id,
|
||||||
}
|
}
|
||||||
acc.AddFields("docker_container_cpu", fields, percputags, now)
|
acc.AddFields("docker_container_cpu", fields, percputags, tm)
|
||||||
}
|
}
|
||||||
|
|
||||||
totalNetworkStatMap := make(map[string]interface{})
|
totalNetworkStatMap := make(map[string]interface{})
|
||||||
@@ -462,7 +466,7 @@ func gatherContainerStats(
|
|||||||
if perDevice {
|
if perDevice {
|
||||||
nettags := copyTags(tags)
|
nettags := copyTags(tags)
|
||||||
nettags["network"] = network
|
nettags["network"] = network
|
||||||
acc.AddFields("docker_container_net", netfields, nettags, now)
|
acc.AddFields("docker_container_net", netfields, nettags, tm)
|
||||||
}
|
}
|
||||||
if total {
|
if total {
|
||||||
for field, value := range netfields {
|
for field, value := range netfields {
|
||||||
@@ -495,17 +499,17 @@ func gatherContainerStats(
|
|||||||
nettags := copyTags(tags)
|
nettags := copyTags(tags)
|
||||||
nettags["network"] = "total"
|
nettags["network"] = "total"
|
||||||
totalNetworkStatMap["container_id"] = id
|
totalNetworkStatMap["container_id"] = id
|
||||||
acc.AddFields("docker_container_net", totalNetworkStatMap, nettags, now)
|
acc.AddFields("docker_container_net", totalNetworkStatMap, nettags, tm)
|
||||||
}
|
}
|
||||||
|
|
||||||
gatherBlockIOMetrics(stat, acc, tags, now, id, perDevice, total)
|
gatherBlockIOMetrics(stat, acc, tags, tm, id, perDevice, total)
|
||||||
}
|
}
|
||||||
|
|
||||||
func gatherBlockIOMetrics(
|
func gatherBlockIOMetrics(
|
||||||
stat *types.StatsJSON,
|
stat *types.StatsJSON,
|
||||||
acc telegraf.Accumulator,
|
acc telegraf.Accumulator,
|
||||||
tags map[string]string,
|
tags map[string]string,
|
||||||
now time.Time,
|
tm time.Time,
|
||||||
id string,
|
id string,
|
||||||
perDevice bool,
|
perDevice bool,
|
||||||
total bool,
|
total bool,
|
||||||
@@ -576,7 +580,7 @@ func gatherBlockIOMetrics(
|
|||||||
if perDevice {
|
if perDevice {
|
||||||
iotags := copyTags(tags)
|
iotags := copyTags(tags)
|
||||||
iotags["device"] = device
|
iotags["device"] = device
|
||||||
acc.AddFields("docker_container_blkio", fields, iotags, now)
|
acc.AddFields("docker_container_blkio", fields, iotags, tm)
|
||||||
}
|
}
|
||||||
if total {
|
if total {
|
||||||
for field, value := range fields {
|
for field, value := range fields {
|
||||||
@@ -607,7 +611,7 @@ func gatherBlockIOMetrics(
|
|||||||
totalStatMap["container_id"] = id
|
totalStatMap["container_id"] = id
|
||||||
iotags := copyTags(tags)
|
iotags := copyTags(tags)
|
||||||
iotags["device"] = "total"
|
iotags["device"] = "total"
|
||||||
acc.AddFields("docker_container_blkio", totalStatMap, iotags, now)
|
acc.AddFields("docker_container_blkio", totalStatMap, iotags, tm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ The plugin expects messages in the
|
|||||||
```toml
|
```toml
|
||||||
# Read metrics from MQTT topic(s)
|
# Read metrics from MQTT topic(s)
|
||||||
[[inputs.mqtt_consumer]]
|
[[inputs.mqtt_consumer]]
|
||||||
servers = ["localhost:1883"]
|
## MQTT broker URLs to be used. The format should be scheme://host:port,
|
||||||
|
## schema can be tcp, ssl, or ws.
|
||||||
|
servers = ["tcp://localhost:1883"]
|
||||||
## MQTT QoS, must be 0, 1, or 2
|
## MQTT QoS, must be 0, 1, or 2
|
||||||
qos = 0
|
qos = 0
|
||||||
## Connection timeout for initial connection in seconds
|
## Connection timeout for initial connection in seconds
|
||||||
|
|||||||
@@ -56,7 +56,10 @@ type MQTTConsumer struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var sampleConfig = `
|
var sampleConfig = `
|
||||||
servers = ["localhost:1883"]
|
## MQTT broker URLs to be used. The format should be scheme://host:port,
|
||||||
|
## schema can be tcp, ssl, or ws.
|
||||||
|
servers = ["tcp://localhost:1883"]
|
||||||
|
|
||||||
## MQTT QoS, must be 0, 1, or 2
|
## MQTT QoS, must be 0, 1, or 2
|
||||||
qos = 0
|
qos = 0
|
||||||
## Connection timeout for initial connection in seconds
|
## Connection timeout for initial connection in seconds
|
||||||
@@ -239,9 +242,7 @@ func (m *MQTTConsumer) createOpts() (*mqtt.ClientOptions, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
scheme := "tcp"
|
|
||||||
if tlsCfg != nil {
|
if tlsCfg != nil {
|
||||||
scheme = "ssl"
|
|
||||||
opts.SetTLSConfig(tlsCfg)
|
opts.SetTLSConfig(tlsCfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,8 +258,17 @@ func (m *MQTTConsumer) createOpts() (*mqtt.ClientOptions, error) {
|
|||||||
if len(m.Servers) == 0 {
|
if len(m.Servers) == 0 {
|
||||||
return opts, fmt.Errorf("could not get host infomations")
|
return opts, fmt.Errorf("could not get host infomations")
|
||||||
}
|
}
|
||||||
for _, host := range m.Servers {
|
|
||||||
server := fmt.Sprintf("%s://%s", scheme, host)
|
for _, server := range m.Servers {
|
||||||
|
// Preserve support for host:port style servers; deprecated in Telegraf 1.4.4
|
||||||
|
if !strings.Contains(server, "://") {
|
||||||
|
log.Printf("W! mqtt_consumer server %q should be updated to use `scheme://host:port` format", server)
|
||||||
|
if tlsCfg == nil {
|
||||||
|
server = "tcp://" + server
|
||||||
|
} else {
|
||||||
|
server = "ssl://" + server
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
opts.AddBroker(server)
|
opts.AddBroker(server)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
"github.com/influxdata/telegraf"
|
||||||
"github.com/influxdata/telegraf/internal"
|
"github.com/influxdata/telegraf/internal"
|
||||||
@@ -100,6 +101,7 @@ func (d *Datadog) Write(metrics []telegraf.Metric) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
redactedApiKey := "****************"
|
||||||
ts.Series = make([]*Metric, metricCounter)
|
ts.Series = make([]*Metric, metricCounter)
|
||||||
copy(ts.Series, tempSeries[0:])
|
copy(ts.Series, tempSeries[0:])
|
||||||
tsBytes, err := json.Marshal(ts)
|
tsBytes, err := json.Marshal(ts)
|
||||||
@@ -108,13 +110,13 @@ func (d *Datadog) Write(metrics []telegraf.Metric) error {
|
|||||||
}
|
}
|
||||||
req, err := http.NewRequest("POST", d.authenticatedUrl(), bytes.NewBuffer(tsBytes))
|
req, err := http.NewRequest("POST", d.authenticatedUrl(), bytes.NewBuffer(tsBytes))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to create http.Request, %s\n", err.Error())
|
return fmt.Errorf("unable to create http.Request, %s\n", strings.Replace(err.Error(), d.Apikey, redactedApiKey, -1))
|
||||||
}
|
}
|
||||||
req.Header.Add("Content-Type", "application/json")
|
req.Header.Add("Content-Type", "application/json")
|
||||||
|
|
||||||
resp, err := d.client.Do(req)
|
resp, err := d.client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error POSTing metrics, %s\n", err.Error())
|
return fmt.Errorf("error POSTing metrics, %s\n", strings.Replace(err.Error(), d.Apikey, redactedApiKey, -1))
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user