The purpose of the application is to make a piece that could process "very many" access logs and build statistics on them
GOLang setup
- install via yum/apt/brew install go...
- install via gvm (аналог rvm)
- install via docker
- install from official site
if you don't have $GOPATH setup it
export GOPATH=~/go
mkdir $GOPATH/{src,bin,pkg}
git clone https://github.com/blackbass1988/access_logs_stats $GOPATH/src/github.com/blackbass1988/access_logs_stats
common case
make
после того, как добро собралось, можно пакнуть с использованием https://upx.github.io не стал добалять в однострочник, потому что сначала надо поставить upx. Пусть это остается на совести
В результате использования флагов и упаковщика получается уменьшить размер бинарника с 3.6MB до 845KB
upx access_logs_stats
./access_logs_stats -c config.json
./access_logs_stats -c config.yaml
field | description |
---|---|
input | это точка, откуда будут читаться. Здесь может быть как файл,так и пайп, например. Experimental: syslog:udp::515/nginx |
regexp | глобальное регулярное выражение, которое нужно, чтобы выделить поля для последующих вычислений |
period | период, раз во сколько отправлять статистику в output. Валидные значения единиц измерения - "ns", "us" (или "µs"), "ms", "s", "m", "h". |
counts | перечисление полей, по которым надо строить счетчики по уникальным значениям |
aggregates | перечисление полей, по которым будут собираться данные для групповых операций. Список доступных групповых операций описан ниже |
filters | перечисление фильтров, по которым будут считаться метрики. Таким образом можно в отдельности считать метрики по каждому фильтру. Описание формата фильтра описано ниже |
output | перечисление методов отправки результатов. У каждого отправителя может быть своя настройка. Список доступных отправителей и способе их настройки описан ниже |
template_vars | объект переменных, которые можно поместить в output.template или input в формате ${variableName} |
input
one of:
- file
- syslog
- stdin:nowait
Filter
field | description |
---|---|
filter | регулярное выражение, описывающее, какие строки должны попасть под фильтр |
prefix | префикс, который будет у ключа в output. |
items | массив. перечисление метрик, которые надо посчитать и отправить в output |
items[].field | названия поля. Соответствует полям из глобального регулярного выражения regexp |
metrics | перечисление метрик, которые надо посчитать для поля field |
Output
На данный момент доступно 2 отправщика: console и zabbix console не имеет настроек, заббикс имеет следующие настройки zabbix_host - хост сервера zabbix, zabbix_port - порт сервера zabbix, host - имя хоста, которым будет представляться приложение при отправке результатов
общий формат отправщика:
{
"type": "output_name",
"settings": {"output_config1":"output_config_value1", template: "${metric}.${field}"}
}
в случае отправщика console надо оставить объект settings пустым (settings:{})
Формат ключа в отправщик по умолчанию формат следующий:
${field}.${metric}
если указан prefix у фильтра, то он ВСЕГДА добавляется в ${field}
можно поменять формат вывода, переопределив параметр template в свойстве settings конкретного output
у двух разных output может быть два разных template
Список доступных операций со счетчиками (counts):
- cps_{val} - кол-во элементов по уникальному значению {val} в секунду для поля field
- uniq - кол-во уникальных значений за период
- percentage_{val} - процент по уникальному {val} за съем для поля field
Список доступных групповых операци (aggregated):
Сохраяняет все значения из поля (с плавающей запятой) и позволяет применить следующие операции:
- min - минимальное значение по полю
- max - максимальное значение по полю
- avg - среднее значение по полю
- ips (items per second)
- len (кол-во элементов в группе),
- cent_{N} - посчитать N-ый перцентиль
./access_logs_stats -c config.json
make english doc
make tests for sender
make normal syslog parser and remove regular expressions
make conf.d/*.json for multiple instances of app
make normal exit after one tick
re/libpcre.go getNamedGroupsFromExpression make parser