@gogolang

Страница 590 из 1630
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
ну по шагам надо, сначала надо убедиться что приложение шлет логи в логстеш, для этого можно повесить свою заглушку на tcp порт и слушать, будут приходить строки заканчивающие на \n
тобишь выключить логсташ с этого порта или просто логи временно слать на другой порт где поставить свой микродемон ожидающий соединения?)

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
У логстэша есть аутпут stdout и кодек rubydebug. Помогает отлаживать.
как вариант, приэтом rubydebug совсем не обязателен

есть json

можно в файл

в общем это вопрос удобства

lalex
24.10.2017
17:05:16
как вариант, приэтом rubydebug совсем не обязателен
В консоли красиво форматирует вывод )

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
это как?

и если слайс не используется, го выдает же ошибку

эй парень, ты куда сообщение удалил?

Как правильнее: var list []stringили list := []string{}?
разница в том, что в первом мы явно показываем компилятору какой тип, а во втором он сам определяет(соответственно тратит ресурсы)

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

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

Daniel
24.10.2017
20:37:23
Как правильнее: var list []stringили list := []string{}?
эти строки значат разное вторая делает то же, что первая, плюс создает пустой слайс

ну по факту
по факту все будет ровно одинаковое

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
во-общето, https://play.golang.org/p/QwtKAUHE8G
Да, все так. Как-то загонялся по этому вопросу, "объявление" и "инициализация". Только с практической точки зрения не понял разницы

и там и там можно сразу юзать, append например

что-то где-то недопонял

ок, а в структурах https://play.golang.org/p/5xHLWR4S8U можно считать var man1 man и man2 := man{} идентичным действием?

если я правильно понимаю тут var инициализирует структуру заполняя поля дефолтными нулями для типов

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

Daniel
24.10.2017
21:48:27
если я правильно понимаю тут var инициализирует структуру заполняя поля дефолтными нулями для типов
для структур - идентичное, да. разница есть только для ссылосных типов

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
Если у меня есть структура. В ней несколько полей. Я меняю одно поле. Мютекс можно ставить только на это поле? Или нужно на всю структуру?

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
т.е. ты добавил два мьютекса в одну структуру, ага )))

Страница 590 из 1630