
Nikita
24.10.2017
16:47:18
я просто ток осваиваю ELK и пытаюсь разобраться как лучше в него из go писать логи

Sergey
24.10.2017
16:48:25
у нас немного модифицированная версия вот этой реализации https://github.com/bshuster-repo/logrus-logstash-hook/tree/0.4

Nikita
24.10.2017
16:50:11
к input logstash'a и index в kibana в данном кейсе с logrus вопросы не утихают
я как раз эту либу но с мастер бранча тестил

Google

Nikita
24.10.2017
16:50:44
package main
import (
"github.com/bshuster-repo/logrus-logstash-hook"
log "github.com/sirupsen/logrus"
"net"
"fmt"
)
func main() {
//log := logrus.New()
log.SetFormatter(&log.JSONFormatter{})
conn, err := net.Dial("tcp", "0.0.0.0:5044")
if err != nil {
log.Fatal(err)
}
hook := logrustash.New(conn, logrustash.DefaultFormatter(log.Fields{"type": "myappName"}))
fmt.Println(hook)
if err != nil {
log.Fatal(err)
}
log.AddHook(hook)
ctx := log.WithFields(log.Fields{
"method": "main",
})
ctx.Info("Hello World!")
}
это допиленная для запуска версия, но в терминале вижу что json ов два отдельных

Sergey
24.10.2017
16:53:22
мастер у них кажется очень старый
лучше взять 0.4 бранч, по идее примеры там рабочие

Nikita
24.10.2017
16:55:18
сейчас протестирую
(а я правильно понимаю, что если тесты запускаются эти, то в логсташ таки лог улетает? )

Sergey
24.10.2017
16:56:21
ну я бы проверил все равно)

Nikita
24.10.2017
16:57:51
как именно?
в логах logstash ошибок нет
порт у него 5044 на вход
какие способы есть для проверки? ъ

Sergey
24.10.2017
16:59:56
ну либо логстеш запустить с записью всего в файл, либо свою заглушку повесить на tcp порт и слушать

Nikita
24.10.2017
16:59:57
или еластик смотреть

Google

Nikita
24.10.2017
17:00:51
я только осваиваю этот стек ELK
глупо жаловаться, что это большие компоненты которые за пару дней не освоишь..

Sergey
24.10.2017
17:02:20
ну по шагам надо, сначала надо убедиться что приложение шлет логи в логстеш, для этого можно повесить свою заглушку на tcp порт и слушать, будут приходить строки заканчивающие на \n

Nikita
24.10.2017
17:02:23
но все же все вместе копаю, пытаюсь все по полкам держать, но в одного не просто

Sergey
24.10.2017
17:02:29
каждая строка одно сообщение
после этого, уже разбираться с настройкой логстеша и эластика, чтобы первый передавал во второй
и последний шаг, настройка кибаны, чтобы она все забирала из эластика

Nikita
24.10.2017
17:03:43

lalex
24.10.2017
17:04:13
У логстэша есть аутпут stdout и кодек rubydebug. Помогает отлаживать.

Sergey
24.10.2017
17:04:15
можно на другой порт слать, можно выключить логстеш, это вопрос удобства

lalex
24.10.2017
17:04:31
https://www.elastic.co/guide/en/logstash/current/plugins-outputs-stdout.html

Sergey
24.10.2017
17:04:48
есть json
можно в файл
в общем это вопрос удобства

lalex
24.10.2017
17:05:16

Nikita
24.10.2017
17:05:51

Sergey
24.10.2017
17:05:53

Nikita
24.10.2017
17:06:17

Sergey
24.10.2017
17:06:49
ну тогад по шагам, свою заглушку можно заменить на логстеш пишуший либо в стдаут, либо в файл

Google

Nikita
24.10.2017
17:08:15
1) своя заглушка принимающая от логруса строки
2) переключаю на логсташ, чтобы он начал писать в файл
3) переключаю логсташ на еластик, чтобы еластик сохранял.
4) настраиваю кибанку на отражение данных из еластика
а какой индекс в кибане вы использовали?
просто я всю доку перешерстил, не очень прозрачно мне как именно выбирается этот индекс..
logstash-*, filebeat-* ....

Sergey
24.10.2017
17:09:22
станадртынй logstash-*

Nikita
24.10.2017
17:10:23
тобишь когда логсташь таки начнет писать по этой схеме, данные по этому индексу будут идти?)
Ясно, спасибо большое. Вы мне очень помогли.

Sergey
24.10.2017
17:14:22
Да

Nikita
24.10.2017
17:14:45
Буду действовать по плану)
и может кинуть клич на ту либу, чтобы main ветке в readme написали, мол "устаревший пример" или вроде того
ну или nonstable

Dmitry
24.10.2017
20:21:53
Как правильнее:
var list []stringили
list := []string{}?

Max
24.10.2017
20:30:36
это как?
и если слайс не используется, го выдает же ошибку
эй парень, ты куда сообщение удалил?

Daniel
24.10.2017
20:36:38
а?! ресурсы?!

Max
24.10.2017
20:37:14
ну по факту

Daniel
24.10.2017
20:37:23

Kirill
24.10.2017
20:40:30
и там и там выведет пустой слайс

Google

Daniel
24.10.2017
20:41:08
вообще-то нет

Kirill
24.10.2017
20:41:34
https://play.golang.org/p/QQyEkVD6d9
или я не в том смысле понял вопрос

Daniel
24.10.2017
20:42:48
во-общето, https://play.golang.org/p/QwtKAUHE8G

Max
24.10.2017
20:45:55
грубо говоря, в первом случаи просто определятся слайс, а во втором мы уже создаем указатель на область памяти?

Daniel
24.10.2017
20:47:31
Ага
Мы выделяем память и складываем указатель на нее в переменную слайса, точнее

Kirill
24.10.2017
20:52:48
и там и там можно сразу юзать, append например
что-то где-то недопонял
ок, а в структурах https://play.golang.org/p/5xHLWR4S8U можно считать var man1 man и man2 := man{} идентичным действием?
если я правильно понимаю тут var инициализирует структуру заполняя поля дефолтными нулями для типов

Vasily Romanov
24.10.2017
21:10:15

Anatoly
24.10.2017
21:31:48
вопрос: а сделать сервер нечувствительным к прямым и обратным слешам это везде работать с unix путями, а где требуется дергать filepath.FromSlash(...)?

Daniel
24.10.2017
21:48:27

Dmitry
25.10.2017
08:02:39
А можно, скажем, в одной горутине писать в stdin, а во второй читать оттуда?
Я имею в виду нечто похожее на https://play.golang.org/p/luN4gc2ufS .

Vladimir
25.10.2017
08:14:10
а это... зачем?

Ilya
25.10.2017
08:14:26
да
только писать нужно в Stdout
Или это эмуляция ввода пользователя?

Google

Dmitry
25.10.2017
08:17:14
Да, эмуляция. Пишу воркер, общение с которым происходит через stdin/stdout/stderr. Для облегчённого дебагинга хочу писать в stdin.

Ilya
25.10.2017
08:18:50
тогда скорее всего нет, stdin должен быть readonly

Dmitry
25.10.2017
08:19:24
Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")

Vasily Romanov
25.10.2017
08:35:54
МОжет завернуть всё в итерфейсы io.Reader, io.Writer и ничего не знатьь про Stdin в самой функцит
а при старте функции просто передавать stdin как параметр
это сильно облегчит написание тестов и прочего

Aleksander
25.10.2017
09:21:55
Если у меня есть структура. В ней несколько полей. Я меняю одно поле. Мютекс можно ставить только на это поле? Или нужно на всю структуру?

Andrew
25.10.2017
09:34:36

Aleksander
25.10.2017
09:38:24
Как это - на поле?
Если у меня есть структура. Она содержит две мапы. Если я пишу в первую мапу, мне достаточно блокировать доступ с других потоков только к ней? Или нужно блокировать доступ ко всей структуре, включая вторую мапу?

Alexei
25.10.2017
09:38:59
у тебя мьютекс принадлежит структуре, как ты будешь лочить одну мапу?

Vladimir
25.10.2017
09:39:27
делаешь две структуры с одной мапой в каждой
и лочишь только структуру которую нужно
stuct lockedMap {
sync.RWMutex
map[...]...
}
и посмотри на sync.Map

Alexei
25.10.2017
09:40:12
или сразу sync.Map использовать

Aleksander
25.10.2017
09:40:29
Я в одну структуру вставил две мапы. И для каждой из них просто добавил мютекс

Alexei
25.10.2017
09:40:58
т.е. ты добавил два мьютекса в одну структуру, ага )))

Vladimir
25.10.2017
09:41:30