пятница, 29 марта 2019 г.

Делаем свой docker registry

https://docs.docker.com/registry/deploying/

Само создание сводится к одной команде (требуется установленный докер)
docker run -d -p 5000:5000 --restart=always --name registry registry:2

Потом вешаем нужный тэг
docker tag ubuntu:16.04 localhost:5000/my-ubuntu
и push
docker push localhost:5000/my-ubuntu

Но с других машин при пуше будет ошибка http: server gave HTTP response to HTTPS client, нужно настраивать сертификат или создавать /etc/docker/daemon.json (см доку).

CentOS, rtpengine dkms сборка модуля

https://habr.com/ru/post/266399/

Главное требование - наличие установленных пакетов ядра:
yum install -y kernel kernel-headers kernel-devel kernel-tools kernel-debug-devel
И перезагружаемся, чтобы переключиться на эту версию. После этого, поставив ngcp-rtpengine-kernel, модуль должен загрузиться сам. Если нет - смотрим линк выше, в сторону dkms add, dkms build, dkms install

Prometheus

Prometheus - "мониторинг нового поколения".
Prometheus' main distinguishing features as compared to other monitoring systems are:

a multi-dimensional data model (timeseries defined by metric name and set of key/value dimensions)
a flexible query language to leverage this dimensionality
no dependency on distributed storage; single server nodes are autonomous
timeseries collection happens via a pull model over HTTP
pushing timeseries is supported via an intermediary gateway
targets are discovered via service discovery or static configuration
multiple modes of graphing and dashboarding support
support for hierarchical and horizontal federation

Prometheus после nagios или zabbix может сначала очень сильно запутать, как ставить, как запускать... Если с тем же заббиксом - поставили, прошли по быстрой настройке, и вот у нас есть база, есть веб, есть ядро системы, ставим агенты где надо и пишем правила что мониторить, то тут может поначалу пухнуть голова.
Ставить можно прямо на хост, можно в докере, но после базовой установки получаем систему которая сама ничего не умеет опрашивать, не умеет оповещать, да и графики там так себе. И тут начинается.
  • Где хранить?
  • Как получать?
  • Как выводить?
  • Как оповещать?
  • Как масштабировать?

Помимо самого прометея, есть ещё
push gateway для работы с кратковременными процессами (когда сервис работает слишком мало времени, что бы Prometheus имел возможность выполнять к нему запросы для получения метрик)
exporters для сбора метрик из сторонних сервисом (и таких экспортёров – миллион, и имя им легион). В частности, большой список есть тут https://prometheus.io/docs/instrumenting/exporters/
alertmanager – менеджер уведомлений (умеет Slack, почту и т.д.)

А также..
  1. дашборды (dashboards), где будем настраивать всякие красивые графики;
  2. Системы сбора, обработки метрик;
  3. Базы, где метрики будут храниться;
1. Grafana
2. StatsD, telegraf, carbon
3. graphite, influxdb, whisper, prometheus...

четверг, 28 марта 2019 г.

Мониторим nginx статистику (коды ответов итд) через prometheus, подключаем dashboard в grafana

Базовый (не Plus) nginx выдаёт крайне скупую статистику - сколько коннектов сейчас, сколько обработано. Чтобы получать больше информации, нужно или парсить access логи, или ставить модуль vts - их есть 2 вида
1) https://github.com/vozlt/nginx-module-vts
собирается динамическим модулем для nginx, причём версии nginx и модуля должны совпадать

2) https://github.com/knyar/nginx-lua-prometheus
требует lua, то есть или нужен nginx plus или openresty

Поставим первый модуль и подключим к нему экспортер vts в json
https://github.com/hnlq715/nginx-vts-exporter
UP: больше не нужно, nginx-vts научился экспортировать prometheus и json сам. Просто пишем server например на порт 9913 "как было" и всё. И там сразу
    location /metrics {
        vhost_traffic_status_display;
        vhost_traffic_status_display_format prometheus;
        vhost_traffic_status_bypass_stats on;
    }

Сборку и установку динамического модуля опустим (подробнее есть тут), только проверим что по адресу http://localhost/status есть отдача статистики модуля (а чтобы она появилась, читаем тут).
Теперь подключаем экспортер, и по адресу http://localhost:9913/metrics смотрим что появилась информация.
А теперь само подключение дашборда.
http://docs.grafana.org/reference/export_import/#importing-a-dashboard
Читаем как подключать, там достаточно просто id вставить и заполнить data source (prometheus), брать например тут
Nginx VTS Stats

Теперь переходим на http://(server):3000/dashboard/import и в Grafana.com Dashboard вставляем нужный нам id.

PS
Обращаю внимание, есть такой шлак
https://github.com/nginxinc/nginx-prometheus-exporter
Почему шлак? Потому что для чистого nginx он просто экспортирует stub_status, тот самый мизер.

среда, 27 марта 2019 г.

ещё немного про сборку пакетов под debian

https://habr.com/ru/company/itsumma/blog/443490/#comment_19876102

А у вас была необходимость собирать пакеты «правильно и канонично»? (Под этим я имею ввиду когда пишется debian/rules а потом все собирается при помощи dpkg-buildpackage -us -uc)

Просто, если делать это для внутренних нужд, то шаблон control.in, куда подставляются нужны значения версий, posints/postrm скрипты если нужны, директория с деревом файлом + fakeroot dpkg-deb --build и готовый пакет. Вроде совсем небольно. Можно еще fpm использовать, но если нет необходимости собирать пакеты под другие дистрибутивы, то какого-то особого преимущества он имхо не даст.

А если совсем «для себя», то можно checkinstall использовать.

https://michael.stapelberg.ch/posts/2016-11-25-build-tools/
Ну и сама статья о том, что с пакетами в debian всё довольно печально даже для maintainer

JSON Web Tokens (JWT)

JSON Web Token (JWT) — это открытый стандарт (RFC 7519) для создания токенов доступа, основанный на формате JSON. Как правило, используется для передачи данных для аутентификации в клиент-серверных приложениях. Токены создаются сервером, подписываются секретным ключом и передаются клиенту, который в дальнейшем использует данный токен для подтверждения своей личности.

Может использоваться для stateless http, верификации и валидации,в sip может применяться как подтверждение что звонящий не подделал заголовки...

Что почитать по теме:
https://ru.wikipedia.org/wiki/JSON_Web_Token
Пять простых шагов для понимания JSON Web Tokens (JWT)
JWT простым языком: что такое JSON токены и зачем они нужны

понедельник, 25 марта 2019 г.

debian wheezy: Cannot fetch index base URL http://pypi.python.org/simple/

https://stackoverflow.com/questions/21294997/pip-connection-failure-cannot-fetch-index-base-url-http-pypi-python-org-simpl

Когда пытаемся сделать yum install python-pip; pip install --updrade pip то получаем
Cannot fetch index base URL http://pypi.python.org/simple/

Фикс:  pip install --index-url=https://pypi.python.org/simple/ --upgrade pip
(внимание на https://)