🄽🄸🄺🄸🅃🄰
я просто ток осваиваю ELK и пытаюсь разобраться как лучше в него из go писать логи
Sergey
у нас немного модифицированная версия вот этой реализации https://github.com/bshuster-repo/logrus-logstash-hook/tree/0.4
🄽🄸🄺🄸🅃🄰
к input logstash'a и index в kibana в данном кейсе с logrus вопросы не утихают
🄽🄸🄺🄸🅃🄰
я как раз эту либу но с мастер бранча тестил
🄽🄸🄺🄸🅃🄰
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
мастер у них кажется очень старый
Sergey
лучше взять 0.4 бранч, по идее примеры там рабочие
🄽🄸🄺🄸🅃🄰
сейчас протестирую
🄽🄸🄺🄸🅃🄰
(а я правильно понимаю, что если тесты запускаются эти, то в логсташ таки лог улетает? )
Sergey
ну я бы проверил все равно)
🄽🄸🄺🄸🅃🄰
как именно?
🄽🄸🄺🄸🅃🄰
в логах logstash ошибок нет
🄽🄸🄺🄸🅃🄰
порт у него 5044 на вход
🄽🄸🄺🄸🅃🄰
какие способы есть для проверки? ъ
Sergey
ну либо логстеш запустить с записью всего в файл, либо свою заглушку повесить на tcp порт и слушать
🄽🄸🄺🄸🅃🄰
или еластик смотреть
🄽🄸🄺🄸🅃🄰
я только осваиваю этот стек ELK
🄽🄸🄺🄸🅃🄰
глупо жаловаться, что это большие компоненты которые за пару дней не освоишь..
Sergey
ну по шагам надо, сначала надо убедиться что приложение шлет логи в логстеш, для этого можно повесить свою заглушку на tcp порт и слушать, будут приходить строки заканчивающие на \n
🄽🄸🄺🄸🅃🄰
но все же все вместе копаю, пытаюсь все по полкам держать, но в одного не просто
Sergey
каждая строка одно сообщение
Sergey
после этого, уже разбираться с настройкой логстеша и эластика, чтобы первый передавал во второй
Sergey
и последний шаг, настройка кибаны, чтобы она все забирала из эластика
🄽🄸🄺🄸🅃🄰
lalex
У логстэша есть аутпут stdout и кодек rubydebug. Помогает отлаживать.
Sergey
можно на другой порт слать, можно выключить логстеш, это вопрос удобства
lalex
https://www.elastic.co/guide/en/logstash/current/plugins-outputs-stdout.html
Sergey
Sergey
есть json
Sergey
можно в файл
Sergey
в общем это вопрос удобства
lalex
🄽🄸🄺🄸🅃🄰
Sergey
ну тогад по шагам, свою заглушку можно заменить на логстеш пишуший либо в стдаут, либо в файл
🄽🄸🄺🄸🅃🄰
1) своя заглушка принимающая от логруса строки
2) переключаю на логсташ, чтобы он начал писать в файл
3) переключаю логсташ на еластик, чтобы еластик сохранял.
4) настраиваю кибанку на отражение данных из еластика
🄽🄸🄺🄸🅃🄰
а какой индекс в кибане вы использовали?
🄽🄸🄺🄸🅃🄰
просто я всю доку перешерстил, не очень прозрачно мне как именно выбирается этот индекс..
🄽🄸🄺🄸🅃🄰
logstash-*, filebeat-* ....
Sergey
станадртынй logstash-*
🄽🄸🄺🄸🅃🄰
тобишь когда логсташь таки начнет писать по этой схеме, данные по этому индексу будут идти?)
Ясно, спасибо большое. Вы мне очень помогли.
Sergey
Да
🄽🄸🄺🄸🅃🄰
Буду действовать по плану)
🄽🄸🄺🄸🅃🄰
и может кинуть клич на ту либу, чтобы main ветке в readme написали, мол "устаревший пример" или вроде того
🄽🄸🄺🄸🅃🄰
ну или nonstable
Dmitry
Как правильнее:
var list []stringили
list := []string{}?
Maxim
это как?
Maxim
и если слайс не используется, го выдает же ошибку
Maxim
эй парень, ты куда сообщение удалил?
Daniel
а?! ресурсы?!
Maxim
ну по факту
Daniel
вообще-то нет
Daniel
во-общето, https://play.golang.org/p/QwtKAUHE8G
Maxim
грубо говоря, в первом случаи просто определятся слайс, а во втором мы уже создаем указатель на область памяти?
Daniel
Ага
Daniel
Мы выделяем память и складываем указатель на нее в переменную слайса, точнее
Vasily
да, в этом случае - можно
Anatoly
вопрос: а сделать сервер нечувствительным к прямым и обратным слешам это везде работать с unix путями, а где требуется дергать filepath.FromSlash(...)?
Daniel
для структур - идентичное, да. разница есть только для ссылосных типов
Dmitry
А можно, скажем, в одной горутине писать в stdin, а во второй читать оттуда?
Я имею в виду нечто похожее на https://play.golang.org/p/luN4gc2ufS .
Vladimir
а это... зачем?
Илья
да
Илья
только писать нужно в Stdout
Илья
Или это эмуляция ввода пользователя?
Dmitry
Да, эмуляция. Пишу воркер, общение с которым происходит через stdin/stdout/stderr. Для облегчённого дебагинга хочу писать в stdin.
Илья
тогда скорее всего нет, stdin должен быть readonly
Dmitry
Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
Vasily
МОжет завернуть всё в итерфейсы io.Reader, io.Writer и ничего не знатьь про Stdin в самой функцит
Vasily
а при старте функции просто передавать stdin как параметр
Vasily
это сильно облегчит написание тестов и прочего
Alex
Если у меня есть структура. В ней несколько полей. Я меняю одно поле. Мютекс можно ставить только на это поле? Или нужно на всю структуру?
Anonymous
Alex
Как это - на поле?
Если у меня есть структура. Она содержит две мапы. Если я пишу в первую мапу, мне достаточно блокировать доступ с других потоков только к ней? Или нужно блокировать доступ ко всей структуре, включая вторую мапу?
Alexei
у тебя мьютекс принадлежит структуре, как ты будешь лочить одну мапу?
Vladimir
делаешь две структуры с одной мапой в каждой