пятница, 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://)

вторник, 26 февраля 2019 г.

CentOS: чем собирать пакеты

1) классика, rpmbuild
1.5) собираем srpm и потом дособираем пакеты через mock
2) fpm. Осторожно, ruby! Умеет собирать не только под центос, но руби убивает его на корню.
3) tito
4) rpkg

Чем плох rpmbuild - он не умеет выкачивать сам пакеты (есть spectool, но он качает только готовые файлы), интеграции с гитом не умеет. Умеет в частности tito, или можно взять за пример такое.

четверг, 14 февраля 2019 г.

How to Fix error for MySQL 5.7 with Ubuntu 18.04 {ERROR 1698 (28000): Access denied for user ‘root’@’localhost’}

https://www.expresstechsoftwares.com/mysql-access-denied-user-root-localhost/

Суть в том что в 5.7.25 ВДРУГ перестал работать логин рутом по сети и даже от другого юзера (не рута сервера), в частности ломается коннект через phpmyadmin после минорного обновления mysql.
Коннектимся от рута, без параметров
# mysql
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;


Или можно так
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password';FLUSH PRIVILEGES;

Непонятно чей это косяк, но нервов он может попортить.

вторник, 12 февраля 2019 г.

Ходим по ssh через tor

https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/ssh

Последний рецепт через .ssh/config не работает, еще 2 проверены и работают
sudo apt-get update
sudo apt-get install tor torproxy
sudo service tor start

1) torproxy ssh aaa@bb
2) ssh -o "ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %p" aaa@bb

пятница, 8 февраля 2019 г.

Расширенная статистика nginx

Есть такой пакет, nginx-module-vts, даёт много полезной информации. Есть ссылка на офсайте в разделе NGINX 3rd Party Modules.
Но последний коммит был 30 июня 2018 и с тех пор автор не отвечает.

Есть другой модуль, nginx-lua-prometheus. Под debian есть инструкция через установку libnginx-mod-http-lua, но centos тут в пролёте, так что собираем первый.

понедельник, 4 февраля 2019 г.

Ускоряем ansible

Проблемы могут быть в разных местах.
Можно ускорить стадию gathering facts, включив кэширование фактов
[defaults]
fact_caching=redis
https://docs.ansible.com/ansible/latest/plugins/cache.html

Когда к хосту подключение долгое, поможет pipelining
[ssh_connection]
pipelining = True
https://docs.ansible.com/ansible/latest/reference_appendices/config.html?highlight=pipelining#ansible-pipelining

Также при этом можно посмотреть на ControlPersist
https://docs.ansible.com/ansible/latest/reference_appendices/config.html?highlight=controlpersist#ansible-ssh-args

Accelerated Mode Deprecated

Pull режим
http://docs.ansible.com/playbooks_intro.html#ansible-pull

Также было найдено такое, но у меня не заработало.
https://docs.ansible.com/ansible/latest/plugins/connection/persistent.html

Небольшая памятка по сборке deb пакетов

Для простых пакетов есть checkinstall

Сборка пакетов. Глава 2. DEB. Часть 1. Общие понятия.
Сборка пакетов. Глава 2. DEB. Часть 2. Сборка пакетов
Но статьи 2007 года.

https://www.debian.org/doc/manuals/maint-guide/build.ru.html
https://habr.com/ru/post/78094/