Compare commits

...

4 Commits

Author SHA1 Message Date
ad5c3d983a ADD mariadb note
All checks were successful
Build MkDocs / build-and-deploy (push) Successful in 13s
2025-03-24 22:56:38 +03:00
6fa690dd96 ADD influxdb note 2025-03-24 22:56:20 +03:00
f04048e3c0 ADD tls prometheus 2025-03-24 22:23:59 +03:00
5bf0d5327e UPDATE readme 2025-03-24 22:19:32 +03:00
4 changed files with 447 additions and 4 deletions

82
docs/Other/InfluxDB.md Normal file
View File

@ -0,0 +1,82 @@
### Influx1.x
- `unflux` - подключиться
- `show databases` - список бд
- `create database <db>` - создать бд
- `drop database <db>` - удалить бд
---
- `USE mydb` - перейти в БД
- `SHOW MEASUREMENTS` - показать измерения
- `SHOW FIELD KEYS` - показать все поля
- `SHOW TAG KEYS` - показать все
- `SHOW TAG KEYS FROM "measurement_name"` - показать теги определенного измерения
- `SHOW RETENTION POLICIES ON mydb` - посмотреть политики хранения на бд
- `CREATE RETENTION POLICY "one_week" ON mydb DURATION 7d REPLICATION 1`
- `ALTER RETENTION POLICY "one_week" ON mydb DURATION 14d`
- `DROP RETENTION POLICY "one_week" ON mydb`
---
- `SHOW USERS` - показать пользователей
- `CREATE USER username WITH PASSWORD 'password'` - создать пользователя
- `GRANT ALL PRIVILEGES TO username` - дать пользователю права администратора
- `GRANT READ ON mydb TO username` - дать права на базу данных
- `DROP USER username` - удалить пользователя
---
- `influxd backup -database mydb /path/to/backup` - резервное копирование бд
- `influxd restore -database mydb /path/to/backup` - восстановление бд
### Influx2.x
- `SHOW BUCKETS` - показать список бакетов
- `CREATE BUCKET mybucket` - создать бакет
- `DROP BUCKET mybucket` - удалить бакет
- `SHOW MEASUREMENTS ON "mybucket"` - показать измерения в бакете
- `ALTER BUCKET mybucket SET RETENTION 7d` - политика хранения
- Записать данные через API
```bash
curl --request POST "http://localhost:8086/api/v2/write?org=my-org&bucket=my-bucket&precision=ns" \
--header "Authorization: Token YOUR_API_TOKEN" \
--data-raw "temperature,location=server1 value=25.6"
```
- Запрос данных через Flux
```
from(bucket: "my-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "temperature" and r.location == "server1")
|> mean()
```
- `SELECT * FROM "mybucket"."autogen"."temperature" WHERE location = 'server1'` - если включен
- `influx auth list` - показать список токенов
- `influx auth create --org myorg --all-access` - создать токен
- `influx auth delete --id TOKEN_ID` - удалить токен
---
- `influx org list` - посмотреть список организаций
- `influx org create -n myorg` - создать организацию
- `influx org delete -n myorg` - удалить организацию
---
- `influx task list --org myorg` - просмотр списка задач
- `influx task delete --id taskid` - удаление задачи
---
- `influxd backup -bucket mybucket /path/to/backup` - резервное копирование бд
- `influxd restore -bucket mybucket /path/to/backup` - восстановление бд
### Telegraf
- `telegraf --config /etc/telegraf/telegraf.conf --test` - запустить телеграф в режиме отладки

212
docs/Other/MariaDB.md Normal file
View File

@ -0,0 +1,212 @@
### MariaDB
- `mysql -u [user] -p` - локальное подключение к серверу
- `mysql -h [host] -P [port] -u [user] -p` - удалённое подключение к серверу
---
- `SHOW DATABASES;` - показать все бд
- `CREATE DATABASE [db_name];` - создать бд
- `DROP DATABASE [db_name];` - удалить бд
---
- `USE [db_name];` - использовать бд
- `SHOW TABLES;` - показать таблицы
- `DROP TABLE [table_name];` - удалить таблицу
- `TRUNCATE TABLE [table_name];` - очистить таблицу (удалить все данные)
- `DESCRIBE [table_name]` или `SHOW COLUMNS FROM [table_name];` - структура таблицы
---
- `CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';` - создать пользователя, может коннектиться к базе только через `localhost`
- Права
```sql
GRANT SELECT, INSERT ON [db_name].[table_name] TO 'username'@'localhost';
GRANT ALL PRIVILEGES ON [db_name].* TO 'username'@'localhost';
```
- `REVOKE INSERT ON [db_name].[table_name] FROM 'username'@'localhost';` - отозвать права
- `FLUSH PRIVILEGES;` - обновить права
- `RENAME USER 'user1'@'localhost' TO 'user1'@'192.168.1.100';` - изменить пользователя (имя, доступ с какого хоста)
- `DROP USER 'username'@'localhost';` - удалить пользователя
- `SELECT user, host FROM mysql.user;` - список пользователей и хостов
---
- Изменение таблицы
```
ALTER TABLE [table_name] ADD COLUMN [column_name] [data_type];
ALTER TABLE [table_name] DROP COLUMN [column_name];
```
- Пример запроса на чтение данных
```sql
SELECT * FROM [table_name];
SELECT column1, column2 FROM [table_name] WHERE condition;
-- Примеры условий:
WHERE id = 5;
WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31';
WHERE column1 LIKE '%pattern%';
```
- Обновить данные
```sql
UPDATE [table_name] SET column1 = 'new_value' WHERE condition;
```
- Удалить данные
```sql
DELETE FROM [table_name] WHERE condition;
```
---
- Индексы
```sql
-- Создать индекс
CREATE INDEX [index_name] ON [table_name] (column1, column2); -- по умолчанию btree
-- Удалить индекс
DROP INDEX [index_name] ON [table_name];
```
---
- `mysqldump -u [user] -p [db_name] > backup.sql` - резервное копирование бд (`-p --all-databases` - все бд)
- `mysql -u [user] -p [db_name] < backup.sql` - восстановление бд
---
- `mariabackup --backup --user=[user] --password=[password] --target-dir=/backup/` - бэкап быстрее, бинарный формат, не блокирует таблицы, перед восстановлением необходимо завершить все транзации - `mariabackup --prepare --target-dir=/backup/`
- Восстановление бэкапа
```bash
sudo systemctl stop mariadb
sudo rm -rf /var/lib/mysql/*
mariabackup --copy-back --target-dir=/backup/
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mariadb
```
---
- План выполнения запроса
```sql
EXPLAIN SELECT * FROM table_name WHERE column1 = 'value';
```
- Выполняет запрос и показывает фактический план выполнения с реальными метриками (время, количество строк и т.д.)
```sql
ANALYZE FORMAT=JSON SELECT * FROM table_name WHERE column1 = 'value';
```
- `SHOW PROFILE` Показывает профиль выполнения запроса
```sql
SET profiling = 1;
SELECT * FROM table_name WHERE column1 = 'value';
SHOW PROFILE;
```
??? info "SHOW PROFILE"
SHOW PROFILE — это инструмент для анализа времени выполнения отдельных этапов запроса. Показывает, сколько времени заняла каждая операция (например, парсинг, выполнение, отправка данных).
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000123 |
| checking permissions | 0.000045 |
| Opening tables | 0.000067 |
| init | 0.000034 |
| System lock | 0.000023 |
| optimizing | 0.000056 |
| executing | 0.000078 |
| Sending data | 0.001234 |
| end | 0.000045 |
| query end | 0.000034 |
| closing tables | 0.000023 |
| freeing items | 0.000045 |
| cleaning up | 0.000034 |
+----------------------+----------+
- Показывает активные соединения и выполняемые запросы.
```sql
SHOW FULL PROCESSLIST;
```
- Показывает статус InnoDB, включая информацию о блокировках, транзакциях и буферах.
```sql
SHOW ENGINE INNODB STATUS;
```
- Показывает статистику сервера
```sql
SHOW STATUS LIKE 'Innodb_buffer_pool_reads';
```
- Завершает выполнение запроса по его ID.
```sql
KILL [process_id];
```
- Перестраивает таблицу и освобождает неиспользуемое пространство.
```sql
OPTIMIZE TABLE table_name;
```
- Обновляет статистику для оптимизатора.
```sql
ANALYZE TABLE table_name;
```
- Проверяет целостность таблицы.
```sql
CHECK TABLE table_name;
```
---
- Логирование медленных запросов
```sql
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1; -- Запросы дольше 1 секунды
```
- Показывает статистику выполнения запросов.
```sql
SELECT * FROM performance_schema.events_statements_summary_by_digest;
```
---
#### Настройки
- `SHOW VARIABLES;` - посмотреть текущие настройки
!!! info "Конфиги"
Основной конфиг: `/etc/my.cnf` или `/etc/mysql/my.cnf`
Дополнительные конфиги: `/etc/mysql/conf.d/` или `/etc/mysql/mariadb.conf.d/`
Пример структуры:
```ini
[mysqld]
datadir = /var/lib/mysql
bind-address = 0.0.0.0
innodb_buffer_pool_size = 1G
```
!!! info "Логи"
Общий лог: `/var/log/mysql/mysql.log` (логирует все запросы).
Лог ошибок: `/var/log/mysql/error.log` (или `/var/log/mariadb/mariadb.log`)
Бинарный лог (журнал транзакций): `/var/lib/mysql/mysql-bin.*` (включает все изменения данных)
`mysqlbinlog /var/lib/mysql/mysql-bin.000001` - для просмотра бинарных логов
Лог медленных запросов: `/var/log/mysql/mysql-slow.log`
!!! info ""
По умолчанию данные лежат в `/var/lib/mysql/`
Можно посмотреть в конфиге параметр `datadir`

View File

@ -2,4 +2,4 @@
## DevOps База знаний
## Здесь я буду хранить свои заметки и инструкции, которые пишу для себя!!!!
## Мои заметки и инструкции

View File

@ -61,6 +61,103 @@ WantedBy=multi-user.target
- `sudo systemctl start prometheus`
- `sudo systemctl enable prometheus`
#### Настройка TLS
- `touch web-config.yml` - создать конфигурационный файл для настойки TLS
- Добавить в Unit-файл пусть к конфигу TLS в директиве `ExecStart`
```bash
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /etc/prometheus/data \
--web.config.file /etc/prometheus/web-config.yml
```
- `certbot certonly --nginx -d prometheus.mcarov.pro` - сгенирировать сертификаты, команду не хочу пояснять
!!! tip "Если на сервере нет Nginx"
`certbot certonly --standalone -d prometheus.mcarov.pro`
- Добавить Серт и Ключ в `web-config.yml`
```
tls_server_config:
cert_file: /home/prometheus/certs/example.com/example.com.crt
key_file: /home/prometheus/certs/example.com/example.com.key
```
- Добавить строку в `/etc/crontab` для обновления серта
```
0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q
```
- Создать скрипт `/etc/letsencrypt/renewal-hooks/deploy/set-permissions-and-restart-prometheus.sh`
```bash
#!/bin/bash
# Выдать права пользователю prometheus
setfacl -R -m u:prometheus:rX /etc/letsencrypt/
# Перезагрузить Prometheus
systemctl restart prometheus
```
- `chmod +x /etc/letsencrypt/renewal-hooks/deploy/set-permissions-and-restart-prometheus.sh`
- `certbot renew --dry-run` - для отладки процесса обновления сертификатов
- Создать конфиг nginx в `/etc/nginx/sites-available`
```
server {
server_name prometheus.mcarov.pro;
location / {
client_max_body_size 512M;
proxy_pass https://127.0.0.1:9090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
access_log /var/log/nginx/prometheus.mcarov.pro.access.log;
error_log /var/log/nginx/prometheus.mcarov.pro.error.log;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/prometheus.mcarov.pro/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/prometheus.mcarov.pro/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = prometheus.mcarov.pro) {
return 301 https://$host$request_uri;
}
listen 80;
server_name prometheus.mcarov.pro;
return 404;
}
```
- `ln -s /etc/nginx/sites-available/prometheus.mcarov.pro /etc/nginx/sites-enabled/`
- `nginx -t`
- `systemctl reload nginx`
#### Аутентификация для Prometheus Server
- `htpasswd -nBC 10 "" | tr -d ':\n'` - выполнить
- Добавить в `web-config.yml`
```yml
basic_auth_users:
# user: password (hash)
admin: $2y$10$QzpQ2fO9TpU1Hm4VbB6AMO8ZsdoplfesfAmI8MFB402BVIu5gf.TK
```
- `systemctl restart prometheus`
- В UI Grafana настроить Basic auth в Data Source
#### 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 на удалённый хост
@ -89,10 +186,62 @@ ExecStart=/usr/local/bin/node_exporter
WantedBy=multi-user.target
```
- `systemctl daemon-reload`
- `sudo systemctl daemon-reload`
- `sudo systemctl start node_exporter`
- `sudo systemctl enable node_exporter`
#### Настройка TLS
- `touch web.yml`
- Создать `openssl.cnf` и наполнить содержимым:
```
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
CN = 150.241.66.94
[v3_ext]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectAltName=@alt_names
[alt_names]
IP.1 = 150.241.66.94
```
- `sudo openssl req -x509 -newkey rsa:2048 -keyout node_exporter.key -out node_exporter.pem -days 36500 -nodes -config openssl.cnf -extensions v3_ext` - генирируем серты
- Не забываем выдать права на сертификаты
- Добавить в `web.yml`
```
tls_server_config:
cert_file: /etc/prometheus/node_exporter/certs/node_exporter.pem
key_file: /etc/prometheus/node_exporter/certs/node_exporter.key
```
- Добавить в Unit Node Exporter в директиву ExecStart
```bash
--web.config.file=/etc/prometheus/node_exporter/web.yml
```
- `systemctl daemon-reload`
- `systemctl restart node_exporter.service`
- На машине с Prometheus Server добавить в `prometheus.yml` в нужную джобу экспортера
```
scheme: https
tls_config:
ca_file: /etc/prometheus/node_exporter/srv-infra/certs/node_exporter.pem
```
- `systemctl restart prometheus`
### Про PromQL
- `increase()` возвращает общий прирост за указанный интервал времени.
@ -105,6 +254,6 @@ increase(<метрика>[<интервал>])
### Полезности
- `promtool check config prometheus.yml`
- `promtool check rules rules.yml`
- `promtool check config prometheus.yml`- проверка синтаксиса
- `promtool check rules rules.yml` - проверка синтаксиса
- `promtool test rules rules_test.yml`