mirror of
https://github.com/ilyamak04/DevOps.git
synced 2025-04-04 07:04:51 +02:00
+
This commit is contained in:
parent
496464a61d
commit
508d4e0e5f
@ -64,17 +64,9 @@ ADD CONSTRAINT age_check CHECK (age >= 18);
|
||||
```
|
||||
|
||||
|
||||
SELECT pid, usename, datname, client_addr, client_port, application_name, state
|
||||
FROM pg_stat_activity;
|
||||
|
||||
|
||||
SELECT usename, client_addr, client_port, state
|
||||
FROM pg_stat_activity;
|
||||
|
||||
|
||||
psql -U postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;"
|
||||
|
||||
psql -U postgres -d postgres -c "SELECT datname FROM pg_database WHERE datistemplate = false;" -t -A
|
||||
psql -U postgres -d postgres -c "SELECT datname FROM pg_database WHERE datistemplate = false
|
||||
|
||||
|
||||
---
|
||||
@ -93,28 +85,7 @@ SELECT pid, usename, datname, client_addr, client_port, application_name, state
|
||||
FROM pg_stat_activity
|
||||
WHERE datname = current_database();
|
||||
```
|
||||
```
|
||||
SELECT pid,
|
||||
now() - query_start AS runtime_query,
|
||||
state,
|
||||
query,
|
||||
usename,
|
||||
datname
|
||||
FROM pg_stat_activity
|
||||
WHERE state = 'active' and datname = current_database()
|
||||
ORDER BY runtime_query DESC;
|
||||
```
|
||||
```
|
||||
SELECT pid,
|
||||
now() - xact_start AS transaction_time,
|
||||
state,
|
||||
query,
|
||||
usename,
|
||||
datname
|
||||
FROM pg_stat_activity
|
||||
WHERE state IN ('active', 'idle in transaction') and datname = current_database()
|
||||
ORDER BY transaction_time DESC;
|
||||
```
|
||||
|
||||
```
|
||||
SELECT
|
||||
pid, -- Идентификатор процесса
|
||||
@ -127,7 +98,7 @@ SELECT
|
||||
datname, -- База данных
|
||||
xact_start -- Время начала транзакции
|
||||
FROM pg_stat_activity
|
||||
WHERE state IN ('active', 'idle in transaction')
|
||||
WHERE state IN ('active', 'idle in transaction') and datname = current_database()
|
||||
ORDER BY transaction_runtime DESC;
|
||||
```
|
||||
```
|
||||
@ -216,8 +187,48 @@ WHERE pid = <process_id>;
|
||||
- `/etc/postgresql/12/main/postgresql.conf`
|
||||
|
||||
---
|
||||
```
|
||||
# Размер таблиц в бд
|
||||
select schemaname as table_schema,
|
||||
relname as table_name,
|
||||
pg_size_pretty(pg_total_relation_size(relid)) as total_size,
|
||||
pg_size_pretty(pg_relation_size(relid)) as data_size,
|
||||
pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid))
|
||||
as index_size
|
||||
from pg_catalog.pg_statio_user_tables
|
||||
order by pg_total_relation_size(relid) desc,
|
||||
pg_relation_size(relid) desc;
|
||||
```
|
||||
```
|
||||
# Размер базы в целом
|
||||
select pg_size_pretty(pg_database_size('название базы'));
|
||||
# Размер индекса в бд
|
||||
SELECT
|
||||
pg_size_pretty(SUM(pg_relation_size(indexrelid))) AS total_index_size
|
||||
FROM
|
||||
pg_stat_all_indexes;
|
||||
```
|
||||
```
|
||||
# Индексы в бд по отдельности
|
||||
SELECT
|
||||
pg_size_pretty(pg_relation_size(indexrelid)) AS index_size,
|
||||
indexrelname AS index_name,
|
||||
t.relname AS table_name
|
||||
FROM
|
||||
pg_stat_all_indexes
|
||||
JOIN
|
||||
pg_class t ON t.oid = pg_stat_all_indexes.relid
|
||||
ORDER BY
|
||||
pg_relation_size(indexrelid) DESC;
|
||||
|
||||
|
||||
# Сумма индексов в таблице
|
||||
SELECT
|
||||
pg_size_pretty(SUM(pg_relation_size(indexrelid))) AS total_index_size
|
||||
FROM
|
||||
pg_stat_all_indexes
|
||||
WHERE
|
||||
relname = 'svip';
|
||||
```
|
||||
`SHOW shared_preload_libraries;`
|
||||
- `pg_config --pkglibdir` - библиотеки постгреса
|
||||
|
||||
|
@ -35,83 +35,3 @@ services:
|
||||
3. Ищет в частных реестрах (если указан).
|
||||
4. Сборка из Dockerfile (если указана опция build в docker-compose.yml).
|
||||
|
||||
---
|
||||
Когда мы пишем
|
||||
```yaml
|
||||
depends_on:
|
||||
postgresql-db:
|
||||
condition: service_healthy
|
||||
```
|
||||
|
||||
это значит что все хелфчеки к сервису (контейнеру) postgresql-db должны выполниться успешно, только после этого контейнер начнёт подниматься
|
||||
|
||||
---
|
||||
Оператор `&&` в командах оболочки используется для цепочки команд, где следующая команда выполняется только если предыдущая выполнилась успешно (с кодом возврата 0).
|
||||
|
||||
---
|
||||
CMD [] не использует оболочку для выполнения команды, команда передаётся напрямую процессу, то есть пайпы и всяки приблуды оболочки не работают
|
||||
Docker не запускает оболочку, а передает команду напрямую в процесс.
|
||||
|
||||
---
|
||||
В чём разница сежду ENTRYPOINT и CMD
|
||||
|
||||
CMD можно переопределить при запуске контейнера
|
||||
```
|
||||
docker run <image> echo Hello
|
||||
```
|
||||
|
||||
ENTRYPOINT задает команду, которая всегда будет выполняться при запуске контейнера. Он используется для установки основной команды, которая должна быть выполнена, и она не может быть легко перезаписана при запуске контейнера. Однако, вы можете передавать дополнительные параметры командой docker run, и эти параметры будут добавлены к командной строке, указанной в ENTRYPOINT. В отличие от CMD, ENTRYPOINT гарантирует, что указанная команда будет выполнена, даже если при запуске контейнера вы не укажете команду.
|
||||
|
||||
в ENTRYPOINT можно передавать переменные окружения
|
||||
```
|
||||
ENV MY_VAR=Hello
|
||||
ENTRYPOINT ["sh", "-c", "echo $MY_VAR"]
|
||||
```
|
||||
|
||||
```
|
||||
ENTRYPOINT ["nginx", "-g"]
|
||||
CMD ["daemon off;"]
|
||||
```
|
||||
|
||||
---
|
||||
```
|
||||
key: |
|
||||
Первая строка
|
||||
Вторая строка
|
||||
Третья строка
|
||||
```
|
||||
Результат
|
||||
```
|
||||
Первая строка
|
||||
Вторая строка
|
||||
Третья строка
|
||||
```
|
||||
|
||||
```
|
||||
key: >
|
||||
Первая строка
|
||||
Вторая строка
|
||||
Третья строка
|
||||
```
|
||||
Результат
|
||||
```
|
||||
Первая строка Вторая строка Третья строка
|
||||
```
|
||||
```
|
||||
key: >
|
||||
Первая строка
|
||||
Вторая строка
|
||||
```
|
||||
Результат
|
||||
```
|
||||
Первая строка Вторая строка\n
|
||||
```
|
||||
```
|
||||
key: >-
|
||||
Первая строка
|
||||
Вторая строка
|
||||
```
|
||||
Результат
|
||||
```
|
||||
Первая строка Вторая строка
|
||||
```
|
@ -1,6 +1,6 @@
|
||||
### Команды
|
||||
- `git remote -v` - показывает все удалённые репозитории, которые связаны с локальным репозиторием
|
||||
- `git branch -vv` - показывает upstream ветку
|
||||
- `git init ; git remote add origin <https> or <ssh>` - добавить удалённый репозиторий
|
||||
- `rm -rf /path/to/repo/.git` - git больше не будет отслеживать эту директорию
|
||||
- `git config --global --list`
|
||||
- `git config --global user.name "Ваше Имя"`
|
||||
|
@ -15,7 +15,7 @@
|
||||
the version command etc.
|
||||
Examples are heap size, GC logging, JMX ports etc.
|
||||
|
||||
JAVA_OPTS (Optional) Java runtime options used when any command
|
||||
JAVA_OPTS (Optional) Java runtime options used when any command
|
||||
is executed.
|
||||
Include here and not in CATALINA_OPTS all options, that
|
||||
should be used by Tomcat and also by the stop process,
|
||||
@ -31,4 +31,37 @@
|
||||
|
||||
---
|
||||
|
||||
https://www.baeldung.com/java-memory-beyond-heap
|
||||
https://www.baeldung.com/java-memory-beyond-heap
|
||||
|
||||
---
|
||||
|
||||
Компиляция и интерпретация в JVM
|
||||
Компиляция в байт-код:
|
||||
|
||||
Когда ты пишешь код на Java и запускаешь компиляцию (например, с помощью javac), исходный код (.java) компилируется в байт-код (.class). Этот байт-код — это промежуточное представление программы, которое не зависит от конкретной операционной системы или архитектуры процессора.
|
||||
|
||||
Байт-код — это не машинный код, а набор инструкций для JVM. Он оптимизирован для выполнения на виртуальной машине.
|
||||
|
||||
Интерпретация байт-кода:
|
||||
|
||||
Когда ты запускаешь программу (например, с помощью java), JVM интерпретирует байт-код. Это значит, что JVM читает инструкции байт-кода и выполняет их шаг за шагом.
|
||||
|
||||
Интерпретация происходит "на лету", то есть каждая инструкция байт-кода преобразуется в машинный код и выполняется в момент обращения к ней.
|
||||
|
||||
JIT-компиляция (Just-In-Time):
|
||||
|
||||
Современные JVM (например, HotSpot в OpenJDK) используют JIT-компиляцию для повышения производительности. Вместо того чтобы интерпретировать байт-код каждый раз, JVM анализирует часто выполняемые участки кода (например, горячие методы) и компилирует их в нативный машинный код.
|
||||
|
||||
Этот машинный код сохраняется и используется при последующих вызовах, что значительно ускоряет выполнение программы.
|
||||
|
||||
JIT-компиляция сочетает в себе преимущества интерпретации (гибкость, кроссплатформенность) и компиляции (высокая производительность).
|
||||
|
||||
Итог:
|
||||
Компиляция в байт-код происходит один раз, когда ты компилируешь исходный код Java.
|
||||
|
||||
Интерпретация байт-кода происходит при запуске программы, если код не был скомпилирован JIT-компилятором.
|
||||
|
||||
JIT-компиляция применяется для оптимизации часто выполняемого кода во время работы программы.
|
||||
|
||||
Таким образом, JVM использует оба подхода: интерпретацию для гибкости и JIT-компиляцию для производительности.
|
||||
|
||||
|
@ -69,6 +69,7 @@ APT работает поверх более низкоуровневого ин
|
||||
- `ip route` - таблица маршрутизации (можно проверить есть ли шлюз)
|
||||
- `resolvectl status` - инфо о днс
|
||||
- `cat /etc/resolv.conf` - инфо о днс
|
||||
- `ip -4 route get 8.8.8.8`
|
||||
|
||||
|
||||
### База
|
||||
|
100
linux/NETWORK.MD
Normal file
100
linux/NETWORK.MD
Normal file
@ -0,0 +1,100 @@
|
||||
### на базе Red Hat
|
||||
|
||||
- `firewall-cmd --zone=public --add-masquerade --permanent`
|
||||
- `firewall-cmd --reload`
|
||||
|
||||
### На базе Debian
|
||||
#### firewall Ubuntu - ufw
|
||||
|
||||
```
|
||||
# Установка UFW
|
||||
sudo apt update
|
||||
sudo apt install ufw
|
||||
|
||||
# Открываем порт, используемый для SSH (по умолчанию 22)
|
||||
sudo ufw allow <ssh-port>/tcp
|
||||
|
||||
# Закрываем все входные
|
||||
sudo ufw default deny incoming
|
||||
sudo ufw default allow outgoing
|
||||
|
||||
# Включаем фаерволл
|
||||
sudo ufw enable
|
||||
# Перезагрузить
|
||||
ufw reload
|
||||
|
||||
# Показать состояние ufw и активные правила
|
||||
sudo ufw status verbose
|
||||
ufw status numbered
|
||||
```
|
||||
```
|
||||
# Отключить фаерволл
|
||||
sudo ufw disable
|
||||
|
||||
# Удалить правило (будут применены настройки по умолчанию)
|
||||
sudo ufw delete allow <port>/<protocol> # удалить разрешение
|
||||
sudo ufw delete deny <port>/<protocol> # удалить запрет
|
||||
|
||||
# Сброс всех правил
|
||||
sudo ufw reset
|
||||
|
||||
# Вывести логи ufw
|
||||
sudo tail -f -n 100 /var/log/ufw.log
|
||||
|
||||
# Изменить уровень логирования
|
||||
sudo ufw logging <low/medium/high>
|
||||
|
||||
# Разрешить доступ ко всем портам с определённого IP-адреса
|
||||
sudo ufw allow from <IPv4>
|
||||
|
||||
# Разрешить доступ к порту с определённого IP-адреса
|
||||
sudo ufw allow from <IPv4> to any port <port>
|
||||
```
|
||||
```
|
||||
# Пресеты
|
||||
# Вывести список пресетов
|
||||
sudo ufw app list
|
||||
|
||||
# Открыть все соединения, которые нужны Nginx
|
||||
sudo ufw allow "Nginx Full"
|
||||
|
||||
# Удалить правило для пресета
|
||||
sudo ufw delete allow "Nginx Full"
|
||||
```
|
||||
```
|
||||
# Интерфейсы
|
||||
sudo ufw allow in on wg0
|
||||
sudo ufw allow out on wg0
|
||||
```
|
||||
|
||||
|
||||
Да, все данные в конечном счёте передаются в бинарном виде, потому что сеть работает с битами и байтами.
|
||||
Но разница в том, как и где происходит эта "бинаризация" данных.
|
||||
|
||||
⚡ HTTP/1.1: Текстовый протокол с бинарной передачей на сетевом уровне
|
||||
Формат данных: человекочитаемый текст (например, заголовки GET / HTTP/1.1 и тело в формате JSON).
|
||||
Процесс передачи:
|
||||
Сервер создаёт текстовый HTTP-запрос.
|
||||
Когда данные отправляются через сетевой стек (TCP/IP), они преобразуются в биты и байты для физической передачи.
|
||||
Важно: серверу и клиенту нужно "читать" эти текстовые данные, что добавляет накладные расходы на парсинг и обработку.
|
||||
🚀 HTTP/2: Бинарный протокол уже на уровне приложения
|
||||
Формат данных: заголовки и служебные данные сразу преобразуются в бинарные фреймы ещё до того, как они попадут в сетевой стек.
|
||||
|
||||
Процесс передачи:
|
||||
|
||||
Сервер упаковывает запросы в бинарные фреймы (например, HEADERS, DATA), ещё на уровне приложения.
|
||||
Эти бинарные фреймы напрямую передаются по TCP, без дополнительной текстовой обработки.
|
||||
Преимущества:
|
||||
|
||||
Меньше накладных расходов на парсинг.
|
||||
Эффективнее сжатие заголовков (HPACK).
|
||||
Возможность мультиплексирования (несколько запросов в одном соединении).
|
||||
🤖 gRPC (на HTTP/2): Максимальная бинаризация
|
||||
Здесь бинаризация идёт ещё глубже:
|
||||
Сами данные (не только заголовки) сериализуются в бинарный формат с помощью Protobuf.
|
||||
Это даёт ещё большую производительность по сравнению с текстовыми форматами (например, JSON).
|
||||
🎯 Краткий вывод:
|
||||
HTTP/1.1: текстовый формат на уровне приложения → преобразование в биты на уровне сети.
|
||||
HTTP/2: бинарный формат уже на уровне приложения → передача в сеть без дополнительного преобразования.
|
||||
gRPC: данные бинаризуются ещё глубже (через Protobuf) и передаются поверх HTTP/2.
|
||||
Если нужно, могу показать примеры пакетов в Wireshark для наглядности. 🚀
|
@ -6,16 +6,6 @@
|
||||
|
||||
Если ключ сервера изменился и не совпадает с тем, что хранится в `known_hosts`, SSH выдает предупреждение, чтобы предотвратить возможную атаку (например, "человек посередине").
|
||||
|
||||
---
|
||||
Чтобы установить `.deb` пакет в Linux:
|
||||
```bash
|
||||
sudo apt install ./имя_пакета.deb
|
||||
```
|
||||
```bash
|
||||
sudo dpkg -i имя_пакета.deb
|
||||
# если возникнут ошибки с зависимостями
|
||||
sudo apt-get install -f
|
||||
```
|
||||
---
|
||||
В Linux можно отправлять процессы различные сигналы, которые управляют их поведением. Эти сигналы — это механизмы межпроцессного взаимодействия (IPC), которые позволяют процессам реагировать на внешние события, такие как завершение или перезапуск.
|
||||
|
||||
@ -33,7 +23,8 @@ sudo apt-get install -f
|
||||
- SIGCONT (18) - Возобновление выполнения остановленного процесса.
|
||||
|
||||
---
|
||||
`Зомби-процесс` - это процесс в операционной системе Linux (и Unix), который завершил своё выполнение, но его запись в таблице процессов всё ещё существует. Такой процесс уже не выполняется, но сохраняет некоторые данные, пока его родительский процесс не соберёт информацию о завершении (код завершения). Зомби-процессы не используют системные ресурсы, такие как процессор или память, но они занимают записи в таблице процессов, которая ограничена по размеру. Если в системе накапливается слишком много зомби-процессов, это может привести к исчерпанию этих записей, что не позволит создавать новые процессы.
|
||||
|
||||
`Зомби-процесс` — это завершившийся процесс, который всё ещё числится в таблице процессов, чтобы родитель мог получить его код завершения. Он не потребляет ресурсы, кроме записи в таблице процессов. Если таких процессов станет слишком много, это может помешать созданию новых, зомби не накапливаются, если родительский процесс правильно обрабатывает завершение дочерних.
|
||||
|
||||
Если родительский процесс корректно обрабатывает завершение своих дочерних процессов, зомби-процессы не накапливаются.
|
||||
|
||||
@ -46,7 +37,7 @@ sudo apt-get install -f
|
||||
|
||||
---
|
||||
|
||||
Сиротский процесс (или просто "сирота") — это процесс, у которого завершился родительский процесс. В Linux системах, когда родительский процесс умирает до завершения своих дочерних процессов, эти дочерние процессы становятся "сиротами".
|
||||
`"Сирота"` — это процесс, у которого завершился родительский процесс. В Linux системах, когда родительский процесс умирает до завершения своих дочерних процессов, эти дочерние процессы становятся "сиротами".
|
||||
|
||||
Что происходит с процессами-сиротами:
|
||||
|
||||
@ -111,18 +102,15 @@ Swap-файл (или swap-раздел) — это специальная об
|
||||
Работают между различными файловыми системами.
|
||||
Они легче по объему, поскольку содержат только путь к файлу, а не данные самого файла.
|
||||
|
||||
---
|
||||
В файловой системе XFS иноды выделяются динамически, а вот в ext4 нет
|
||||
!!! info "В файловой системе XFS иноды выделяются динамически, а вот в ext4 нет"
|
||||
|
||||
---
|
||||
|
||||
Блочные устройства отправляют данные блоками, символьные потоков данных
|
||||
> Блочные устройства отправляют данные блоками, символьные - потоком данных
|
||||
|
||||
---
|
||||
|
||||
Виртуальная файловая система — это файловая система, которая существует только в памяти и не хранит данные на диске. Примером является /proc, также известная как procfs (процессная файловая система).
|
||||
Виртуальная файловая система — это файловая система, которая существует только в оперативной памяти и не хранит данные на диске, например /proc, также известная как procfs (процессная файловая система).
|
||||
|
||||
- Не хранит данные на диске: Виртуальная файловая система отображает информацию, которая создаётся динамически при запросе и не сохраняется на постоянных носителях.
|
||||
- Не хранит данные на диске: Виртуальная файловая система отображает информацию, которая создаётся динамически при запросе и не сохраняется на постоянных носителях
|
||||
|
||||
- Динамическое содержимое: Данные генерируются операционной системой в реальном времени. Например, содержимое файлов в /proc — это текущая информация о системе, процессах, памяти, конфигурациях и т.д., которая изменяется в зависимости от состояния системы.
|
||||
|
||||
@ -136,9 +124,9 @@ Swap-файл (или swap-раздел) — это специальная об
|
||||
|
||||
---
|
||||
|
||||
Динамическое создание: В большинстве современных систем устройства в /dev управляются с помощью udev (система управления устройствами), которая автоматически создаёт и удаляет файлы в зависимости от подключаемых устройств.
|
||||
Динамическое создание: В большинстве современных систем устройства в `/dev` управляются с помощью udev (система управления устройствами), которая автоматически создаёт и удаляет файлы в зависимости от подключаемых устройств.
|
||||
|
||||
Нет данных на постоянных носителях: Данные о состоянии устройств хранятся в памяти, а сами файлы в /dev отображают текущие устройства системы.
|
||||
Нет данных на постоянных носителях: Данные о состоянии устройств хранятся в памяти, а сами файлы в `/dev` отображают текущие устройства системы.
|
||||
|
||||
Доступ через ядро: Когда обращаются к файлам в /dev, ядро перенаправляет запросы к соответствующим драйверам, позволяя операционной системе взаимодействовать с оборудованием и эмулированными устройствами.
|
||||
|
||||
|
@ -1,10 +0,0 @@
|
||||
- `firewall-cmd --zone=public --add-masquerade --permanent`
|
||||
- `firewall-cmd --reload`
|
||||
|
||||
Базовые права устанавливаются на уровне файловой системы Linux.
|
||||
|
||||
Пользователь Linux добавляется в базу Samba с помощью smbpasswd.
|
||||
|
||||
В конфигурации Samba (smb.conf) задаются дополнительные ограничения и правила.
|
||||
|
||||
Все уровни (Linux, база Samba, smb.conf) должны соответствовать, чтобы пользователь получил доступ.
|
@ -9,7 +9,7 @@
|
||||
```
|
||||
- Создать нового пользователя
|
||||
```
|
||||
useradd user
|
||||
adduser user
|
||||
# passwd для смены пароля пользователя
|
||||
```
|
||||
- Добавить в группу `sudo`
|
||||
|
74
linux/ХРАНИЛКИ.MD
Normal file
74
linux/ХРАНИЛКИ.MD
Normal file
@ -0,0 +1,74 @@
|
||||
Базовые права устанавливаются на уровне файловой системы Linux.
|
||||
|
||||
Пользователь Linux добавляется в базу Samba с помощью smbpasswd.
|
||||
|
||||
В конфигурации Samba (smb.conf) задаются дополнительные ограничения и правила.
|
||||
|
||||
Все уровни (Linux, база Samba, smb.conf) должны соответствовать, чтобы пользователь получил доступ.
|
||||
|
||||
---
|
||||
|
||||
!!! note "Примечание"
|
||||
Это стандартное примечание.
|
||||
|
||||
??? tip "Совет"
|
||||
Это полезный совет.
|
||||
|
||||
!!! info "Информация"
|
||||
Это дополнительная информация.
|
||||
|
||||
??? warning "Предупреждение"
|
||||
Это важно знать.
|
||||
|
||||
!!! danger "Опасность"
|
||||
Это может привести к проблемам.
|
||||
|
||||
??? success "Успех"
|
||||
Задача выполнена успешно.
|
||||
|
||||
!!! caution
|
||||
|
||||
---
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name example.com;
|
||||
|
||||
# Точное совпадение для корня
|
||||
location = / {
|
||||
return 301 /home;
|
||||
}
|
||||
|
||||
# Префиксное совпадение для статических файлов
|
||||
location /static/ {
|
||||
root /var/www/example/static;
|
||||
}
|
||||
|
||||
# Регулярное выражение для PHP-файлов
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass 127.0.0.1:9000;
|
||||
}
|
||||
|
||||
# Общее совпадение для остальных запросов
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"SELECT
|
||||
role1.id AS id1, role1.version AS version1, rolepermission1.id AS id2, rolepermission1.appobj AS appobj1, rolepermission1.fieldname AS fieldname1, rolepermission1.cancreate AS cancreate1, rolepermission1.canread AS canread1, rolepermission1.canwrite AS canwrite1, rolepermission1.candelete AS candelete1, state1.id AS id3, state1.version AS version2, accesssegment1.id AS id4, accesssegment1.version AS version3, accesssegment1.appobj AS appobj2, accesssegment1.type AS type1, accesssegment1.name AS name1, accesssegment1.system AS system1, accesssegment1.values AS values1
|
||||
FROM role role1
|
||||
LEFT JOIN rolepermission rolepermission1 ON role1.id = rolepermission1.roleid
|
||||
LEFT JOIN state state1 ON rolepermission1.stateid = state1.id
|
||||
LEFT JOIN accesssegment accesssegment1 ON rolepermission1.segmentid = accesssegment1.id
|
||||
WHERE role1.id in ($1, $2, $3, $4)"
|
||||
|
||||
EXPLAIN (analyze, buffers)
|
||||
SELECT
|
||||
role1.id AS id1, role1.version AS version1, rolepermission1.id AS id2, rolepermission1.appobj AS appobj1, rolepermission1.fieldname AS fieldname1, rolepermission1.cancreate AS cancreate1, rolepermission1.canread AS canread1, rolepermission1.canwrite AS canwrite1, rolepermission1.candelete AS candelete1, state1.id AS id3, state1.version AS version2, accesssegment1.id AS id4, accesssegment1.version AS version3, accesssegment1.appobj AS appobj2, accesssegment1.type AS type1, accesssegment1.name AS name1, accesssegment1.system AS system1, accesssegment1.values AS values1
|
||||
FROM role role1
|
||||
LEFT JOIN rolepermission rolepermission1 ON role1.id = rolepermission1.roleid
|
||||
LEFT JOIN state state1 ON rolepermission1.stateid = state1.id
|
||||
LEFT JOIN accesssegment accesssegment1 ON rolepermission1.segmentid = accesssegment1.id
|
||||
WHERE role1.id in (84, 70)
|
@ -1,12 +1,15 @@
|
||||
### Install and Configure
|
||||
#### Prometheus server configure
|
||||
- `wget https://github.com/prometheus/prometheus/releases/download/v2.55.0-rc.0/prometheus-2.55.0-rc.0.linux-amd64.tar.gz` - скачиваем прометеус сервер
|
||||
### Установка Prometheus server и Node exporter
|
||||
#### Prometheus server install
|
||||
|
||||
- `wget https://github.com/prometheus/prometheus/releases/download/v2.55.0-rc.0/prometheus-2.55.0-rc.0.linux-amd64.tar.gz` - скачиваем прометеус сервер
|
||||
- `tar xvfz *.tar.gz`
|
||||
- `sudo mv prometheus /usr/bin/`
|
||||
- `cd prometheus-2.55.0-rc.0.linux-amd64.tar.gz`
|
||||
- `sudo mv prometheus /usr/local/bin/`
|
||||
- `sudo mv promtool /usr/local/bin`
|
||||
- `sudo mkdir /etc/prometheus/`
|
||||
- `sudo mkdir /etc/prometheus/data`
|
||||
- `sudo vi /etc/prometheus/prometheus.yml`
|
||||
- `sudo mv prometheus.yml /etc/prometheus/`
|
||||
|
||||
```yml
|
||||
# prometheus.yml
|
||||
alerting:
|
||||
@ -31,9 +34,10 @@ scrape_configs:
|
||||
- 89.22.241.241:9100
|
||||
```
|
||||
- `useradd -rs /bin/false prometheus` - создаём системного пользователя для работы с prometheus
|
||||
- `chown prometheus:prometheus /usr/bin/prometheus`
|
||||
- `chown prometheus:prometheus /usr/local/bin/prometheus`
|
||||
- `chown -R prometheus:prometheus /etc/prometheus`
|
||||
- `vi /etc/systemd/system/prometheus.service` - создаём systemd юнит
|
||||
|
||||
```bash
|
||||
[Unit]
|
||||
Description=Prometheus Server
|
||||
@ -44,7 +48,8 @@ User=prometheus
|
||||
Group=prometheus
|
||||
Type=simple
|
||||
Restart=on-failure
|
||||
ExecStart=/usr/bin/prometheus \
|
||||
RestartSec=4s
|
||||
ExecStart=/usr/local/bin/prometheus \
|
||||
--config.file /etc/prometheus/prometheus.yml \
|
||||
--storage.tsdb.path /etc/prometheus/data
|
||||
|
||||
@ -52,18 +57,19 @@ ExecStart=/usr/bin/prometheus \
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
- `sudo systemctl daemon-reload` - обновить systemd
|
||||
|
||||
- `sudo systemctl start prometheus`
|
||||
- `sudo systemctl enable prometheus`
|
||||
#### Node exporter configure
|
||||
|
||||
#### Node exporter install
|
||||
- `wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-arm64.tar.gz` - скачиваем node exporter на удалённый хост
|
||||
|
||||
- `tar xvfz *.tar.gz`
|
||||
- `sudo mv node_exporter /usr/bin/`
|
||||
- `sudo mv node_exporter /usr/local/bin/`
|
||||
|
||||
- `sudo useradd -rs /bin/false node_exporter`
|
||||
- `sudo chown node_exporter:node_exporter /usr/bin/node_exporter`
|
||||
- `sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter`
|
||||
- `sudo vi /etc/systemd/system/node_exporter.service`
|
||||
|
||||
```bash
|
||||
# node_exporter.service
|
||||
[Unit]
|
||||
@ -75,7 +81,8 @@ User=node_exporter
|
||||
Group=node_exporter
|
||||
Type=simple
|
||||
Restart=on-failure
|
||||
ExecStart=/usr/bin/node_exporter
|
||||
RestartSec=4s
|
||||
ExecStart=/usr/local/bin/node_exporter
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@ -84,16 +91,18 @@ WantedBy=multi-user.target
|
||||
- `sudo systemctl start node_exporter`
|
||||
- `sudo systemctl enable node_exporter`
|
||||
|
||||
[Можно воспользоваться скриптом](https://github.com/adv4000/prometheus/blob/main/install_prometheus_node_exporter.sh)
|
||||
|
||||
### Про PromQL
|
||||
- `increase()` возвращает общий прирост за указанный интервал времени.
|
||||
```
|
||||
increase(<метрика>[<интервал>])
|
||||
```
|
||||
|
||||
- `rate()` вычисляет скорость изменения за этот же интервал времени, и в результате возвращает количество изменений в секунду.
|
||||
|
||||
- `increase(http_requests_total[5m])` — покажет, сколько запросов пришло за последние 5 минут.
|
||||
- `rate(http_requests_total[5m])` — покажет среднее количество запросов в секунду за последние 5 минут.
|
||||
|
||||
- `rate(http_requests_total[5m])` — покажет среднее количество запросов в секунду за последние 5 минут.
|
||||
### Полезности
|
||||
|
||||
- `promtool check config prometheus.yml`
|
||||
- `promtool check rules rules.yml`
|
||||
- `promtool test rules rules_test.yml`
|
@ -1,4 +1,4 @@
|
||||
### Создание юнита
|
||||
#### Создание юнита
|
||||
|
||||
- в каталоге для хранения unit файлов `cd /etc/systemd/system/` создаём файл с расширением `.service` для службы
|
||||
- ```bash
|
||||
@ -25,10 +25,14 @@ WantedBy=multi-user.target # Указывает, что сервис долже
|
||||
```
|
||||
> `multi-user` - многопользовательский текстовый режим
|
||||
- `sudo systemctl daemon-reload` - обновить конфигурацию systemd
|
||||
- `sudo systemctl enable myservice.service`
|
||||
- `sudo systemctl start myservice.service`
|
||||
- `sudo systemctl status myservice.service`
|
||||
|
||||
|
||||
- `sudo systemctl enable myservice.service` - включает автозапуск юнита при перезагрузке системы
|
||||
- `sudo systemctl start myservice.service` - запустить юнит
|
||||
- `sudo systemctl status myservice.service` - статус юнита
|
||||
|
||||
#### Где же живут эти ваши юниты
|
||||
|
||||
- `/etc/systemd/system/` - юниты созданные пользователем
|
||||
- `/usr/lib/systemd/system/ или /lib/systemd/system/` - юниты, которые создаются менеджерами пакетов при установке ПО
|
||||
- `/run/systemd/system/` - временные юниты, созданные во время работы чего-то (например, контейнера)
|
||||
|
||||
|
||||
|
@ -153,4 +153,47 @@ location @custom_error {
|
||||
return 302 http://example.com/error-page;
|
||||
}
|
||||
```
|
||||
---
|
||||
---
|
||||
|
||||
● Last-modified (If-Modified-Since)
|
||||
● Expires
|
||||
● Etag (If-None-Match)
|
||||
● Cache-control
|
||||
add_header Cache-Control "max-age=31536000, public, no-transform, immutable";
|
||||
|
||||
|
||||
Gzip
|
||||
gzip on;
|
||||
gzip_static on;
|
||||
gzip_types text/plain text/css text/xml application/javascript application/json image/svg+xml
|
||||
application/font-ttf;
|
||||
gzip_comp_level 6;
|
||||
gzip_proxied any;
|
||||
gzip_min_length 1000;
|
||||
gzip_vary on;
|
||||
● Brotli*
|
||||
brotli_static on;
|
||||
brotli on;
|
||||
brotli_comp_level 6;
|
||||
brotli_types text/plain text/xml text/css application/javascript application/json image/x-icon
|
||||
image/svg+xml;
|
||||
|
||||
|
||||
статическое и динамическое сжатие
|
||||
|
||||
|
||||
eepalive_timeout 300;
|
||||
keepalive_requests 10000;
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers
|
||||
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-S
|
||||
HA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-S
|
||||
HA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE
|
||||
-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:
|
||||
DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AE
|
||||
S128-SHA:AES256-SHA:DES-CBC3-SHA;
|
||||
ssl_early_data on;
|
||||
ssl_session_tickets on;
|
||||
ssl_session_timeout 28h;
|
||||
ssl_session_cache shared:SSL:10m;
|
@ -1,5 +1,5 @@
|
||||
|
||||
##### Как посмотреть SWAP ?
|
||||
#### Как посмотреть SWAP ?
|
||||
|
||||
- `Win+R`
|
||||
- `sysdm.cpl`
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
---
|
||||
|
||||
##### Как посмотреть блочные устройства RAM ?
|
||||
#### Как посмотреть блочные устройства RAM ?
|
||||
|
||||
В powershell
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
---
|
||||
|
||||
##### Работа с переменными среды
|
||||
#### Работа с переменными среды
|
||||
|
||||
- `Win+R`
|
||||
- `sysdm.cpl`
|
||||
@ -26,14 +26,14 @@
|
||||
|
||||
---
|
||||
|
||||
##### Как расширить диск
|
||||
#### Как расширить диск
|
||||
|
||||
- `Win+R`
|
||||
- `diskmgmt.msc`
|
||||
|
||||
`AOMEI Partition Assistant` - для работы с дисками
|
||||
|
||||
##### Реестр
|
||||
#### Реестр
|
||||
|
||||
- `Win+R`
|
||||
- `regedit`
|
||||
- `regedit`
|
Loading…
x
Reference in New Issue
Block a user