Записки молодого девопсера
153 subscribers
94 photos
7 files
623 links
Здесь выкладываются различные команды и решения проблем, с которыми приходится сталкиваться, а также интересные статьи и видео из мира IT.
Download Telegram
Набор полезных команд для PostgreSQL

Просмотр текущих запросов в БД
\x
select * from pg_stat_activity;

Проверка статуса репликации на мастере
select * from pg_stat_replication;

Проверка статуса репликации на реплике
select * from pg_stat_wal_receiver;

Посмотреть привилегии для пользователя
SELECT grantor, grantee, table_schema, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'username';

Проверка лага репликации (выполнять только на реплике)
select now() - pg_last_xact_replay_timestamp() AS replication_delay;

Получить список блокировок Lock_Monitoring
select relation::regclass, * from pg_locks where not granted;

Создать представление lock_monitor для просмотра списка блокировок
Исследуем блокировки в PostgreSQL
create view lock_monitor as (
select
coalesce(bgl.relation::regclass::text, bgl.locktype) as locked_item,
now() - bda.query_start as waiting_duration,
bda.pid as blocked_pid,
bda.query as blocked_query,
bdl.mode as blocked_mode,
bga.pid as blocking_pid,
bga.query as blocking_query,
bgl.mode as blocking_mode
from pg_catalog.pg_locks bdl
join pg_stat_activity bda
on bda.pid = bdl.pid
join pg_catalog.pg_locks bgl
on bgl.pid != bdl.pid
and (bgl.transactionid = bdl.transactionid
or bgl.relation = bdl.relation and bgl.locktype = bdl.locktype)
join pg_stat_activity bga
on bga.pid = bgl.pid
and bga.datid = bda.datid
where not bdl.granted
and bga.datname = current_database()
);

Получить блокировки из представления lock_monitor
select * from lock_monitor;

Завершить запрос (gracefully)
SELECT pg_cancel_backend(PID);

Завершить процесс (non-gracefully)
SELECT pg_terminate_backend(PID);

Перечитать файлы конфигурации PostgreSQL
SELECT pg_reload_conf();

Получить текущий уровень изоляции транзакций в БД
SELECT current_setting('transaction_isolation');

Прибить все локи в БД
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN
SELECT blocking_pid FROM lock_monitor
LOOP
EXECUTE 'SELECT pg_terminate_backend('|| r.blocking_pid ||')';
END LOOP;
END $$;
Kali Linux для маленьких хакеров 🤓
https://kids.kali.org/
NPM-пакет с Prometheus-экспортером для PM2. Дашборда для Grafana в github-репе (почти готовая, надо допиливать)
https://www.npmjs.com/package/pm2-metrics
https://github.com/saikatharryc/pm2-prometheus-exporter
Если запускаете в докере, то лучше ставить через npm install или добавить пакет в package.json
и привести ecosystem.config.js к виду, пригодному для запуска 2-х приложений.
Пример файла
module.exports = {
apps: [
{
name: 'Your App',
script: 'app',
args: 'start',
exec_mode: 'cluster',
watch: false,
},
{
name: 'PM2 Exporter',
script: './node_modules/pm2-metrics/exporter.js',
instances: '1',
exec_mode: 'fork',
autorestart: true,
watch: false,
max_memory_restart: '100M',
env: {
NODE_ENV: 'production',
},
},
],
};
Отстрелило пакетный репозиторий python pypi.org.
https://status.python.org/
https://status.fastly.com/
CDN Performance ImpactSubscribe
Investigating - We're currently investigating potential impact to performance with our CDN services.
Jun 8, 09:58 UTC
Не могу не поделиться этим шедевром)
https://youtu.be/FtOAALNAhik
Hetzner начинает двигаться по пути облачного провайдера и на днях анонсировал Hetzner Cloud Apps.
Это набор Linux-дистрибутивов с предустановленным ПО. На текущий момент это Big Blue Button, Docker, Gitlab, Jitsi, LAMP, NextCloud и WordPress.
Все это сделано с использованием средства сборки образов Packer и пакета cloud-init.
Ссылка на репозиторий - https://github.com/hetznercloud/apps