Телеграф `docker_log` не отправляет все сообщения

Я хочу собирать логи в influxdb с нескольких служб go с telegraf ``inputs.docker_log.

  • телеграф: телеграф: 1.12-альпийский
  • Influxdb: Influxdb: 1.7.7-альпийский

Я обнаружил, что infxdb содержит не все записи, которые я вижу в docker service logs.

Я сделал простой сценарий go. И проделайте несколько экспериментов с разной задержкой.

package main

import (
    "time"

    "github.com/labstack/gommon/log"
)

func main() {

    log.SetLevel(log.DEBUG)
    for i := 0; i < 5; i++ {
        writeSomething()
        <-time.After(10 * time.Second)
    }
}

func writeSomething() {
    delay := 50 * time.Millisecond
    log.Debug("A")
    <-time.After(delay)

    log.Debug("B")
    <-time.After(delay)

    log.Debug("C")
    <-time.After(delay)

}

Обнаружил проблему при задержке <1 секунда.

Например. Задержка = 50 миллисекунд

Docker service logs показывает все 3 варианта (A, B, C) 5 раз

liquineq_sender.1.0jvam7vg63cm@Ivan-Lenovo-ideapad    | {"time":"2019-09-26T13:47:17.115060311Z","level":"DEBUG","prefix":"-","file":"main.go","line":"20","message":"A"}
liquineq_sender.1.0jvam7vg63cm@Ivan-Lenovo-ideapad    | {"time":"2019-09-26T13:47:17.165383407Z","level":"DEBUG","prefix":"-","file":"main.go","line":"23","message":"B"}
liquineq_sender.1.0jvam7vg63cm@Ivan-Lenovo-ideapad    | {"time":"2019-09-26T13:47:17.21562549Z","level":"DEBUG","prefix":"-","file":"main.go","line":"26","message":"C"}

Но я не могу найти некоторые из них в Influxdb:

> select message from docker_log;
name: docker_log
time                message
----                -------
1569505640000000000 2019-09-26T13:47:18Z I! Starting Telegraf 1.12.2
1569505640000000000 t=2019-09-26T13:47:12+0000 lvl=info msg="Starting Grafana" logger=server version=6.3.0-pre commit=unknown-dev branch=master compiled=2019-06-21T08:57:10+0000
1569505640000000000 {"time":"2019-09-26T13:47:17.115060311Z","level":"DEBUG","prefix":"-","file":"main.go","line":"20","message":"A"}
1569505647000000000 {"time":"2019-09-26T13:47:27.265995126Z","level":"DEBUG","prefix":"-","file":"main.go","line":"20","message":"A"}
1569505657000000000 {"time":"2019-09-26T13:47:37.417263994Z","level":"DEBUG","prefix":"-","file":"main.go","line":"20","message":"A"}
1569505658000000000 {"time":"2019-09-26T13:47:37.517861048Z","level":"DEBUG","prefix":"-","file":"main.go","line":"26","message":"C"}
1569505668000000000 {"time":"2019-09-26T13:47:47.568291482Z","level":"DEBUG","prefix":"-","file":"main.go","line":"20","message":"A"}
1569505678000000000 {"time":"2019-09-26T13:47:57.71926933Z","level":"DEBUG","prefix":"-","file":"main.go","line":"20","message":"A"}

Если увеличить задержку до 1 секунды, то infxdb будет содержать все записи.

Есть ли способ настроить Telegraf / Infxdb для анализа миллисекунд?


person Ivan Burlutskiy    schedule 26.09.2019    source источник


Ответы (1)


Я решил проблему, добавив следующую настройку в конфигурацию telegraf.

[agent]
  precision = "100ns"

Пояснение:
Накопитель логов телеграфа имеет метод getTime. метод округляет время журнала с некоторым precision.

Из AgentConfig:

// By default or when set to "0s", precision will be set to the same
// timestamp order as the collection interval, with the maximum being 1s.
//   ie, when interval = "10s", precision will be "1s"
//       when interval = "250ms", precision will be "1ms"
// Precision will NOT be used for service inputs. It is up to each individual
// service input to set the timestamp at the appropriate precision.
person Ivan Burlutskiy    schedule 04.10.2019