javascript head title - Как регистрировать ошибки JS от клиента в кибане?




2 Answers

Когда вы говорите «клиент», я предполагаю, что вы имеете в виду клиента регистрации, а не веб-клиента .

Во-первых, сделайте привычкой регистрировать ваши ошибки в общем формате. Logstash любит последовательность, поэтому, если вы поместите текст и JSON в один и тот же выходной журнал, у вас возникнут проблемы. Подсказка: войдите в JSON. Это потрясающе и невероятно гибко.

Общий процесс будет выглядеть так:

  1. В вашем приложении произошла ошибка
  2. Записать ошибку в файл, сокет или по сети
  3. Скажите logstash, как получить (ввести) эту ошибку (например, из файла, прослушать по сети и т. Д.)
  4. Скажите logstash отправить (вывод) ошибку в Elasticsearch (которая может быть запущена на той же машине)

В вашем приложении попробуйте использовать Bunyan Logger для узла. https://github.com/trentm/node-bunyan

приложение узла index.js

var bunyan = require('bunyan');
var log = bunyan.createLogger({
  name: 'myapp',
  streams: [{
    level: 'info',
    stream: process.stdout // log INFO and above to stdout
  }, {
    level: 'error',
    path: '/var/log/myapp-error.log' // log ERROR and above to a file
  }]
});

// Log stuff like this
log.info({status: 'started'}, 'foo bar message');

// Also, in express you can catch all errors like this
app.use(function(err, req, res, next) {
   log.error(err);
   res.send(500, 'An error occurred');
});

Затем вам нужно настроить logstash для чтения этих файлов журнала JSON и отправки в Elasticsearch / Kibana. Создайте файл с именем myapp.conf и попробуйте следующее:

Конфигурация logstash myapp.conf

# Input can read from many places, but here we're just reading the app error log
input {
    file {
        type => "my-app"
        path => [ "/var/log/myapp/*.log" ]
        codec => "json"
    }   
}

# Output can go many places, here we send to elasticsearch (pick one below)
output {

  elasticsearch {
    # Do this if elasticsearch is running somewhere else
    host => "your.elasticsearch.hostname"
    # Do this if elasticsearch is running on the same machine
    host => "localhost"
    # Do this if you want to run an embedded elastic search in logstash
    embedded => true   
  }

}

Затем запустите / перезапустите logstash следующим образом: bin/logstash agent -f myapp.conf web

Перейдите наasticsearch по http://your-elasticsearch-host:9292 чтобы увидеть входящие журналы.

tab get

У меня есть веб-приложение, поддерживаемое в NodeJS и logstash/elasticsearch/kibana для обработки системных журналов, таких как (access_error.log, messages.log etc) . (access_error.log, messages.log etc) .

Сейчас мне нужно записать все ошибки на стороне клиента JavaScript в kibana. Каков наилучший способ сделать это?

РЕДАКТИРОВАТЬ: я должен добавить дополнительную информацию к этому вопросу. Как @Jackie Xu обеспечит частичное решение моей проблемы и как следует из моего комментария:

Меня больше всего интересует реализация обработки ошибок на стороне сервера. Я думаю, что неэффективно записывать каждую ошибку в файл. Я ищу лучшие практики, как сделать его более эффективным.

Мне нужно обрабатывать js-сообщения об ошибках на стороне сервера более эффективно, чем просто записывать в файл. Можете ли вы представить несколько сценариев, как я могу повысить производительность ведения журнала на стороне сервера?




Ведение журнала ошибок с помощью встроенной регистрации файлов по умолчанию позволяет сохранить ваши ошибки, а также позволяет вашему ядру оптимизировать записи для вас.

Если вы действительно думаете, что это недостаточно быстро (вы получаете столько ошибок?), Вы можете просто поместить их в redis.

Logstash имеет вход redis pub / sub, так что вы можете хранить ошибки в redis, а logstash извлечет их и сохранит в вашем случае вasticsearch.

Я предполагаю, что logstash / es находятся на другом сервере, в противном случае на самом деле нет никакого смысла делать это, они также должны хранить данные на диске, и это не так эффективно, как запись файла журнала.

Какое бы решение вы ни использовали, вы захотите сохранить данные, например. записываю это на диск. Добавление только к одному (журналу) файлу очень эффективно, и при сохранении данных единственный способ, которым вы можете обработать больше, - это разделить его на несколько дисков / узлов.




Related