среда, 21 июля 2021 г.

ansible, vault, strings

 Есть удобная утилитка ansible-vault, но она шифрует сразу весь файл. Если это файл с переменными - удобнее когда шифрованы только значения ключей, в том числе при контроле гитом - любое изменение локализуется легко, в случае волта меняется весь файл.

Дешифрование строки

Вот с расшифровкой такого файла беда, ansible-vault уже не понимает что от него хотят (будет ERROR! input is not vault encrypted data. (file) is not a vault encrypted file for (file)), поэтому есть несколько вариантов посмотреть:

1) копируем строку после !vault в файл и далее ansible-vault view ...

2) через дешифровальную буку

   - hosts: localhost

     tasks:

       - debug:

           msg: "{{ secret_value }}"

3) через ansible -m debug, но оно работало до 2.8, там синтаксис будет такой

ansible localhost -m debug -a var="some_var" -e "@file.yml" --ask-vault-pass

Вместо ask можно использовать --vault-password-file (file)

Шифрование строки

А как же зашифровать эту строку?

ansible-vault encrypt_string --ask-vault-pass --stdin-name some_var

спросит два раза пароль волта. 

!!! Потом вводим значение и не нажимая энтер нажимаем два раза ctrl-d

вторник, 13 июля 2021 г.

postgres, расширенный вывод

 Иногда бывает нужно вывести записи как в mysql \G, тут для этого есть тоже команда

\x
select * from sometable;

Вариант 2, с переключением формата

select * from users \x\g\x

И третий, выводить всегда в расширенном виде, даже если уже сделано \x

select * from sometable \gx

https://serverfault.com/questions/34741/postgres-equivalent-to-mysqls-g

postgresql проверка репликации


I use following SQL queries to check status on Postgres v11 usually.

On master:

select * from pg_stat_replication;

On replica (streaming replication in my case):

select * from pg_stat_wal_receiver;
https://stackoverflow.com/questions/43388243/check-postgres-replication-status
И очень полезный совет
For vertical output replace ; with \x\g\x

Такой вот замороченный аналог mysql-ного \G

Ещё несколько запросов для слейвов
select pg_is_in_recovery();
select pg_last_xlog_receive_location();
select pg_last_xlog_replay_location();
SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location()
                  THEN 0
                ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())
              END AS log_delay;



пятница, 9 июля 2021 г.

Работаем с логами

 Для начала, очень рекомендую познакомиться с journalctl, это весьма гибкая система, сделанная как замена syslog-у. Главные отличия - кольцевой буфер для логов, что с одной стороны значит "место не может кончиться от жирного лога", с другой - если нам нужны эти логи то нужны ещё сервисы по их извлечению, парсингу, хранению, ротации; а также вместо Local* работаем по именам сервисов

При этом есть и другие удобные плюшки, вида выдачи лога в нужном формате (-o json)

Если нужен вывод в syslog, есть штатные механизмы (но очень редко они сбоят)

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

Очень годная статья по journalctl

https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs

По настройке связки

https://www.loggly.com/ultimate-guide/centralizing-with-syslog/

И теперь мы можем использовать journalbeat для выгрузки логов.