Consumer Latency Parser
Данный документ содержит инструкции по установке и настройке утилиты ConsumerLatencyParser
, общая функциональность которой описана в Метриках задержки консьюмера.
Требования
Утилита ConsumerLatencyParser
производит считывание всех архивов консьюмера с последующим вычислением точных перцентилей в памяти. Для работы программы необходимо выделение 16Гб памяти. Среднее время выполнения анализа дневных архивов от всех консьюмеров составляет 45 минут.
Установка и компиляция утилиты
Загрузите ConsumerLatencyParser.java
на сервер с доступом к архивам лог файлов консьюмеров.
curl -O https://raw.githubusercontent.com/axibase/atsd/master/finance/ru/ConsumerLatencyParser.java
Загрузите библиотеку commons-math3/3.6.1
.
curl -O https://repo1.maven.org/maven2/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar
Скомпилируйте программу.
javac -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser.java
Тестовый запуск
Убедитесь, что в исходной директории находятся архивы консьюмера за выбранную дату.
ls -lh /path/to/logger_futures/logs/trades.15-02-2021.*
-rw-rw-r-- 1 axibase axibase 48M Mar 5 21:00 /path/to/logger_futures/logs/trades.15-02-2021.1.log.gz
-rw-rw-r-- 1 axibase axibase 18M Mar 5 21:00 /path/to/logger_futures/logs/trades.15-02-2021.2.log.gz
Запустите программу с параметром mode=2
для проверки скорости чтения файлов.
java -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser /path/to/logger_futures/logs/ trades 15-02-2021 /tmp/logger_futures_15-02-2021.csv 2
Start
mode: read
Files found: 1 in /path/to/logger_futures/logs/ for 15-02-2021
consumer/logger name: logger_futures
== processing file /path/to/logger_futures/logs/trades.15-02-2021.1.log.gz : 70315199 ==
processed file. lines: 2232986 in 2206
Skip writing to file
Completed
Запустите программу с параметром mode=2
для расчета процентилей и записью в файл. В данном случае необходимо выделение памяти.
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser /path/to/logger_futures/logs/ trades 15-02-2021 /tmp/logger_futures_15-02-2021.csv
Проверьте результирующий файл на наличие данных в формате CSV.
head /tmp/logger_futures_15-02-2021.csv
date,directory,file,from,to,action,type,count,min,p0.1,p1,p5,p10,p25,p50,p75,p90,p95,p99,p99.9,max
15-02-2021,logger_futures,trades,entry,sending,,,2139592,-516,-309,-70,416,845,2084,3808,6209,13188,20324,59189,207505,932111
15-02-2021,logger_futures,trades,entry,sending,0,,2139592,-516,-309,-70,416,845,2084,3808,6209,13188,20324,59189,207505,932111
15-02-2021,logger_futures,trades,entry,sending,,2,2139592,-516,-309,-70,416,845,2084,3808,6209,13188,20324,59189,207505,932111
15-02-2021,logger_futures,trades,entry,sending,0,2,2139592,-516,-309,-70,416,845,2084,3808,6209,13188,20324,59189,207505,932111
15-02-2021,logger_futures,trades,sending,receive,,,2139592,-460,-184,112,388,559,869,1294,1940,3128,4698,10370,36274,2392041
15-02-2021,logger_futures,trades,sending,receive,0,,2139592,-460,-184,112,388,559,869,1294,1940,3128,4698,10370,36274,2392041
Импорт парсера
Для обработки поступающих от утилиты файлов необходимо установить соответствующий CSV парсер.
- Откройте страницу Tools > CSV Parsers.
- Нажмите Import и загрузите
consumer_latency_parser.xml
.
Создание токена аутентификации
Откройте страницу Admin > API Tokens > Issue Token.
Выберите метод
POST
и укажите/api/v1/csv?config=consumer_latency
в поле URLs.Скопируйте значение поля Token для использования на следующем этапе вместо
<TOKEN>
.Проверьте отправку созданного ранее CSV файла заменив
atsd_hostname
и<TOKEN>
на актуальные значения.
curl "https://atsd_hostname:8443/api/v1/csv?config=consumer_latency" \
--insecure --header "Authorization: Bearer <TOKEN>" \
--form filedata="/tmp/logger_futures_15-02-2021.csv"
Скрипт для обработки архивов
Скрипт предполагает следующую схему хранения архивов в базовой директории /path/to/consumer_archive_base
:
/path/to/consumer_archive_base/logger_fx:
logs/
/path/to/consumer_archive_base/logger_hc_jdk:
logs/
/path/to/consumer_archive_base/logger_futures:
logs/
Создайте файл run_cl_parser.sh
. Замените atsd_hostname
, <TOKEN>
, work_dir
, base_dir
на актуальные значения.
#!/bin/bash
dt=$1
# dt format is dd-MM-yyyy
if [ -z "$dt" ]; then
dt=`TZ=":Europe/Moscow" date -d '-1 day' '+%d-%m-%Y'`
fi
work_dir=/path/to/consumer_latency_parser_directory
base_dir=/path/to/consumer_archive_base
echo "Check files for $dt at $(date)"
cd $work_dir
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_hc_jdk/logs/ trades $dt $work_dir/logger_hc_jdk_trades_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_hc_jdk/logs/ orders $dt $work_dir/logger_hc_jdk_orders_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_hc_jdk/logs/ statistics $dt $work_dir/logger_hc_jdk_statistics_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_futures/logs/ trades $dt $work_dir/logger_futures_trades_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_futures/logs/ orders $dt $work_dir/logger_futures_orders_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_futures/logs/ statistics $dt $work_dir/logger_futures_statistics_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_futures/logs/ index $dt $work_dir/logger_futures_index_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_fx/logs/ trades $dt $work_dir/logger_fx_trades_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_fx/logs/ orders $dt $work_dir/logger_fx_orders_$dt.csv
java -Xmx16G -cp commons-math3-3.6.1.jar:. ConsumerLatencyParser $base_dir/logger_fx/logs/ statistics $dt $work_dir/logger_fx_statistics_$dt.csv
for file in logger_hc_jdk_trades_$dt.csv logger_hc_jdk_orders_$dt.csv logger_hc_jdk_statistics_$dt.csv logger_futures_trades_$dt.csv logger_futures_orders_$dt.csv logger_futures_index_$dt.csv logger_futures_statistics_$dt.csv logger_fx_trades_$dt.csv logger_fx_orders_$dt.csv logger_fx_statistics_$dt.csv
do
curl "https://atsd_hostname:8443/api/v1/csv?config=consumer_latency" \
--insecure --header "Authorization: Bearer <TOKEN>" \
--form filedata="@$file"
done
echo "Done parsing files for $dt at $(date)"
Добавьте право на исполнение chmod +x run_cl_parser.sh
.
Запустите скрипт вручную для выбранной даты с целью проверки.
/path/to/consumer_latency_parser_directory/run_cl_parser.sh 15-02-2021
Добавьте запуск скрипта в планировщик cron
после окончания ежедневной процедуры архивации и копирования архивов.
30 0 * * * /path/to/consumer_latency_parser_directory/run_cl_parser.sh &> /path/to/consumer_latency_parser_directory/cl_parser.log