add usefull info

This commit is contained in:
Илья Макаров 2024-10-18 10:43:58 +03:00
parent f6a28adada
commit 1cdc439e4e
4 changed files with 252 additions and 11 deletions

View File

@ -834,11 +834,11 @@ ansible-galaxy install <роль> -p /etc/ansible/roles
`tests/`: Папка для тестирования роли. Здесь можно хранить тестовые плейбуки и инвентарь.
**Приоритет переменных**
1. Переменные командной строки
1. Переменные командной строки (`-e` или `--extra-vars`)
2. Переменные, объявленные в `vars` внутри плейбука.
3. Переменные, объявленные в `vars` внутри роли.
5. Переменные, определенные в `host_vars`.
3. Переменные, определенные в `host_vars`.
4. Переменные, определенные в `group_vars`.
5. Переменные, объявленные в `vars` внутри роли.
6. Переменные, объявленные в `defaults` внутри роли.
Зависимости можно указать в файле `meta/main.yml`. Например, если роль зависит от другой роли, то она будет автоматически вызвана:
@ -1127,3 +1127,68 @@ asdf: 42
- Используйте контроль версий. Храните ваши плейбуки и файл `inventory` в `git` (или другой системе контроля версий) и фиксируйте изменения, когда вносите в них изменения. Таким образом, у вас будет аудиторский след, описывающий, когда и почему вы изменили правила, автоматизирующие вашу инфраструктуру.
- **Переменные и секреты:** начнём с `group_vars/` подкаталога, названного в честь группы. Внутри этого подкаталога создайте два файла с именами `vars` и `vault`. Внутри файла `vars` определите все необходимые переменные, включая любые конфиденциальные. Затем скопируйте все конфиденциальные переменные в файл `vault` и добавьте к этим переменным префикс `vault_`. Вам следует настроить переменные в `vars` файле так, чтобы они указывали на соответствующие `vault_переменные`, используя синтаксис `jinja2`, и убедиться, что `vault` файл зашифрован с помощью хранилища.
### Опять про роли
```yml
# roles/example/tasks/main.yml
- name: added in 2.4, previously you used 'include'
import_tasks: redhat.yml
when: ansible_facts['os_family']|lower == 'redhat'
- import_tasks: debian.yml
when: ansible_facts['os_family']|lower == 'debian'
# roles/example/tasks/redhat.yml
- yum:
name: "httpd"
state: present
# roles/example/tasks/debian.yml
- apt:
name: "apache2"
state: present
```
- Начиная с версии Ansible 2.4, вы теперь можете использовать роли в составе любых других задач с помощью `import_role` или `include_role`:
```yml
- hosts: webservers
tasks:
- debug:
msg: "before we run our role"
- import_role:
name: example
- include_role:
name: example
- debug:
msg: "after we ran our role"
```
Когда роли определяются классическим способом, они рассматриваются как статические импорты и обрабатываются во время анализа плейбука.
```yml
# Можно указывать путь к роли
- hosts: webservers
roles:
- role: '/path/to/my/roles/common'
```
```yml
# Можно переопределять переменные
- hosts: webservers
roles:
- common
- role: foo_app_instance
vars:
dir: '/opt/a'
app_port: 5000
- role: foo_app_instance
vars:
dir: '/opt/b'
app_port: 5001
```
```yml
# playbook.yml
- hosts: webservers
roles:
- foo
- foo
# roles/foo/meta/main.yml
allow_duplicates: true
```
`allow_duplicates: true` - В этом примере `foo` будет выполнено дважды, поскольку мы явно включили эту функцию

View File

@ -4,7 +4,8 @@
3. [Сеть](#сеть)
4. [База](#база)
5. [Система](#система)
6. [Разное](#разное)
7. [Диски](#диски)
### Настройка сервера
- `groups username` - группы пользователя
@ -57,12 +58,15 @@ APT работает поверх более низкоуровневого ин
- `ps -aux` - выводит список всех процессов с информацией о пользователях, загрузке, времени и командах
- `ps -ef` - полная информация о процессах с идентификаторами владельцев
- `top -o %CPU` - сортировка процессов по указанному полю (например, по CPU)
- `shift + v` в top - процессы в древовидной структуре с отображением дочерних процессов
- `1` - нагрузка на поток (логическое ядро)
- `kill -9 1234` - принудительное завершене процесса (1234 — PID процесса)
- `df -h` - информация о файловых системах
- `df -i` - иноды
- `du` - отображение размера файлов и каталогов
- `s` - отображает только итоговый размер
- `-s` - отображает только итоговый размер
- `--max-depth=1` - выводит размер каталога и его подкаталогов
- `du -sh /tml` - размер директории
- `ifconfig` - информация о сетевых интерфейсах
- `ss -tulpn` - информация о сетевых соединениях
- `ping` - проверка доступности хоста
@ -91,8 +95,7 @@ APT работает поверх более низкоуровневого ин
- notice (5): Важные события.
- info (6): Информационные сообщения.
- debug (7): Отладочные сообщения.
- `df -sh /tml` - развер директории
- `smartctl -a /dev/sda` - смарт отчет диска, генерит сам диск
- `free -m` - оперативная память
- `cat /proc/meminfo` - подробно про память
@ -121,6 +124,92 @@ APT работает поверх более низкоуровневого ин
- `lsof -i :80` - соединения по конкретному порту
- `lsof /dev/sda1` - файлы использующие определённое устройство или файловую систему
- `lsof | grep filename` - Если файл заблокирован и его нельзя удалить или переместить, `lsof` покажет, какой процесс его использует
`strace` - системные вызовы
- `strace` - системные вызовы
### Разное
- `killall -s 9 <hello>` - убивает все процессы в названием hello (`-s` - тип сигнала)
- `w` - залогиненые пользователи и время `uptime`
- `whoami` - имя залогиненного пользователя
- `uptime` - сколько работает система без перезагрузки
- `-s` - время запуска
- `-p` - время работы системы
- `less -S` - не переносит на новую строку
- `sudo reboot now` - перезагрузка системы
- `sudo shutdown now` - выключить компьютер
- `watch "some command"` - переодически запускает команду
### Разное
- `alt .` - перебирает последние аргументы из истории команд (`history`), если аргументов нет, то перебирает сами команды
- `ctrl R` - поиск команд из `history`
- ` !! `
- `ctrl A` - перемещение курсора в начало
- `ctrl E` - перемещение курсора в конец
- `ctrl U` - вырезает всё, что СЛЕВА от курсора (`ctrl Y` - вставить)
- `ctrl W` - выразает 1 слова, СЛЕВА от курсора (`ctrl Y` - вставить)
- `ctrl K` - вырезает всё, что СПРАВА от курсора (`ctrl Y` - вставить)
- `cd -` перейти в предыдущую директорию
- `^restart^status` - замена с ... на ... в последней выполненной команде
- `&` - в конце команды и команды будет выполняться в фоновом режиме
- `nohup <command> &` - если закроем терминал команда продолжит выполняться
- `nl` - как `cat`, но еще выводит номера строк
- `ctrl L` - `clear`
- `reset` - используется для сброса настроек терминала и очистки экрана
---
- `cd` - вернуться в домашнюю директорию
- `touch file{4..13}`
- `mkdir dir_{a..f}`
- `cp -iv file1 dir1/file2` - (`-i`) спрашиваем будем ли перезаписывать
- `cp -nv` - не перезаписывать
- `stat file`
- Размер файла (Size): В байтах.
- Тип файла: Обычный файл, каталог и т. д.
- Права доступа (Access): Права на чтение, запись и выполнение для владельца, группы и других пользователей.
- Идентификаторы пользователя и группы (UID/GID): Идентификатор владельца и группы.
- Время изменения (Modify): Дата и время последнего изменения содержимого файла.
- Время последнего доступа (Access): Когда файл был последний раз открыт.
- Время изменения метаданных (Change): Когда были изменены права или метаданные файла.
- Номер inode: Уникальный номер файла в файловой системе.
- `cp -a source_file destination_directory/` - Опция `-a` эквивалентна комбинации нескольких опций: `-d` (сохраняет символические ссылки), `-p` (сохраняет права доступа, владельца и временные метки), и `-r` (рекурсивно копирует каталоги).
- `cp -vu` - пропустить совпадающие файлы, а скопировать только файлы новее или отсутствующие
---
`/etc/passwd` - инфо о пользователях в системе
### Диски
- `sudo fdisk -l`
- Показывает список всех подключенных устройств (жестких дисков, SSD и т.д.).
- Отображает размер дисков, типы разделов, точки монтирования.
- Полезно для диагностики, перед созданием или изменением разделов.
- `lsblk` - показывает дерево всех подключенных устройств, их разделы, точки монтирования. (`-f` - для более детальной информации)
- `sudo cfdisk <устройство>` - команда для работы с разделами диска
- `sudo mkfs.<тип файловой системы> <устройство>` - команда в Linux для создания файловой системы на разделе диска. Она форматирует указанный раздел с выбранной файловой системой.
- `/etc/fstab` - это файл конфигурации в Linux, который содержит информацию о том, какие файловые системы должны автоматически монтироваться при загрузке системы.
Каждая строка в `/etc/fstab` описывает один файловый раздел и содержит следующие поля:
- Файл устройства (например, /dev/sda1 или UUID диска).
- Точка монтирования (например, /, /home, /mnt/data).
- Тип файловой системы (например, ext4, ntfs, swap).
- Опции монтирования (например, defaults, noatime, ro).
- Параметр для dump (обычно 0, определяет необходимость резервного копирования).
- Параметр для проверки на ошибки (fsck) (0 — не проверять, 1 — проверять при загрузке).
Пример строки
```
UUID=3b14dabe-6a1a-4a1b-9e41-3d9b26b6ef1f / ext4 defaults 0 1
```
- `sudo blkid` - выводит информацию о всех блочных устройствах, включая UUID
- `mount` - используется для подключения файловых систем (например, жестких дисков, флешек) к определенным точкам монтирования в файловой системе
```
mount [OPTIONS] <DEVICE> <MOUNTPOINT>
```
- `sudo mount /dev/sda1 /mnt` - это монтирует раздел /dev/sda1 в директорию /mnt
- `sudo mount -t ext4 /dev/sda1 /mnt` - подключить с указанием типа файловой системы
---
`df -Th` - информация о файловых системах и их типах

View File

@ -85,4 +85,28 @@ Swap-файл (или swap-раздел) — это специальная об
---
Маска прав (`umask`) одна и та же для файлов и директорий, но результат применения маски отличается, поскольку начальные права у файлов и директорий разные (666 для файлов, 777 для директорий). То есть `umask` не различает файлы и директории, она применяется одинаково ко всем объектам, но итоговые права различаются из-за исходных прав.
Маска прав (`umask`) одна и та же для файлов и директорий, но результат применения маски отличается, поскольку начальные права у файлов и директорий разные (666 для файлов, 777 для директорий). То есть `umask` не различает файлы и директории, она применяется одинаково ко всем объектам, но итоговые права различаются из-за исходных прав.
---
***Жесткие ссылки***
**Что это**: Это прямые ссылки на один и тот же файл в файловой системе. Несколько имен могут указывать на один и тот же файл (один inode).
**Информация, которую хранят**: Жесткая ссылка хранит inode файла — уникальный идентификатор файла в файловой системе, но не содержит путь к файлу.
**Особенности:**
У всех жестких ссылок один и тот же inode, то есть это фактически один и тот же файл.
Если исходный файл удален, остальные жесткие ссылки остаются рабочими, так как данные физически не удаляются, пока существует хотя бы одна жесткая ссылка.
Работают только внутри одной файловой системы.
Не могут ссылаться на каталоги (кроме системных ссылок типа `.` и `..`).
***Символические ссылки (symlinks)***
**Что это**: Это ссылки, которые содержат путь к другому файлу или каталогу. Это фактически отдельный файл, который указывает на местоположение целевого файла.
Информация, которую хранят: Символическая ссылка хранит путь к целевому файлу или директории.
**Особенности:**
Если целевой файл удален, символическая ссылка становится «битой» и неработоспособной, так как она указывает на несуществующий путь.
Символические ссылки могут указывать на файлы или каталоги.
Работают между различными файловыми системами.
Они легче по объему, поскольку содержат только путь к файлу, а не данные самого файла.

View File

@ -1,10 +1,35 @@
### 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` - скачиваем прометеус сервер
- `tar xvfz *.tar.gz`
- `sudo mv prometheus /usr/bin/`
- `sudo mkdir /etc/prometheus/`
- `sudo mkdir /etc/prometheus/data`
- `sudo vi /etc/prometheus/prometheus.yml`
```yml
# prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "archers-paradox-servers"
static_configs:
- targets:
- 89.22.241.241:9100
```
- `useradd -rs /bin/false prometheus` - создаём системного пользователя для работы с prometheus
- `chown prometheus:prometheus /usr/bin/prometheus`
- `chown -R prometheus:prometheus /etc/prometheus`
@ -30,7 +55,45 @@ WantedBy=multi-user.target
- `sudo systemctl start prometheus`
- `sudo systemctl enable prometheus`
#### Node exporter configure
- `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 useradd -rs /bin/false node_exporter`
- `sudo chown node_exporter:node_exporter /usr/bin/node_exporter`
- `sudo vi /etc/systemd/system/node_exporter.service`
```bash
# node_exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
Restart=on-failure
ExecStart=/usr/bin/node_exporter
[Install]
WantedBy=multi-user.target
```
- `systemctl daemon-reload`
- `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 минут.