From 1cdc439e4e5ddd148a7c6a2383358d3006f1b70d Mon Sep 17 00:00:00 2001 From: ilyamak04 Date: Fri, 18 Oct 2024 10:43:58 +0300 Subject: [PATCH] add usefull info --- ansible/ANSIBLE.MD | 71 +++++++++++++++++++++++++-- linux/COMMANDS.MD | 101 ++++++++++++++++++++++++++++++++++++--- linux/NOTES.MD | 26 +++++++++- monitoring/PROMETHEUS.MD | 65 ++++++++++++++++++++++++- 4 files changed, 252 insertions(+), 11 deletions(-) diff --git a/ansible/ANSIBLE.MD b/ansible/ANSIBLE.MD index 30fe6f8..d666912 100644 --- a/ansible/ANSIBLE.MD +++ b/ansible/ANSIBLE.MD @@ -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` будет выполнено дважды, поскольку мы явно включили эту функцию \ No newline at end of file diff --git a/linux/COMMANDS.MD b/linux/COMMANDS.MD index f5c1481..453dfd0 100644 --- a/linux/COMMANDS.MD +++ b/linux/COMMANDS.MD @@ -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` - системные вызовы -### Разное \ No newline at end of file +- `killall -s 9 ` - убивает все процессы в названием 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 &` - если закроем терминал команда продолжит выполняться +- `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] +``` + +- `sudo mount /dev/sda1 /mnt` - это монтирует раздел /dev/sda1 в директорию /mnt +- `sudo mount -t ext4 /dev/sda1 /mnt` - подключить с указанием типа файловой системы + +--- +`df -Th` - информация о файловых системах и их типах \ No newline at end of file diff --git a/linux/NOTES.MD b/linux/NOTES.MD index caf7c2b..d1331f3 100644 --- a/linux/NOTES.MD +++ b/linux/NOTES.MD @@ -85,4 +85,28 @@ Swap-файл (или swap-раздел) — это специальная об --- -Маска прав (`umask`) одна и та же для файлов и директорий, но результат применения маски отличается, поскольку начальные права у файлов и директорий разные (666 для файлов, 777 для директорий). То есть `umask` не различает файлы и директории, она применяется одинаково ко всем объектам, но итоговые права различаются из-за исходных прав. \ No newline at end of file +Маска прав (`umask`) одна и та же для файлов и директорий, но результат применения маски отличается, поскольку начальные права у файлов и директорий разные (666 для файлов, 777 для директорий). То есть `umask` не различает файлы и директории, она применяется одинаково ко всем объектам, но итоговые права различаются из-за исходных прав. + +--- + +***Жесткие ссылки*** + +**Что это**: Это прямые ссылки на один и тот же файл в файловой системе. Несколько имен могут указывать на один и тот же файл (один inode). +**Информация, которую хранят**: Жесткая ссылка хранит inode файла — уникальный идентификатор файла в файловой системе, но не содержит путь к файлу. + +**Особенности:** +У всех жестких ссылок один и тот же inode, то есть это фактически один и тот же файл. +Если исходный файл удален, остальные жесткие ссылки остаются рабочими, так как данные физически не удаляются, пока существует хотя бы одна жесткая ссылка. +Работают только внутри одной файловой системы. +Не могут ссылаться на каталоги (кроме системных ссылок типа `.` и `..`). + +***Символические ссылки (symlinks)*** + +**Что это**: Это ссылки, которые содержат путь к другому файлу или каталогу. Это фактически отдельный файл, который указывает на местоположение целевого файла. +Информация, которую хранят: Символическая ссылка хранит путь к целевому файлу или директории. + +**Особенности:** +Если целевой файл удален, символическая ссылка становится «битой» и неработоспособной, так как она указывает на несуществующий путь. +Символические ссылки могут указывать на файлы или каталоги. +Работают между различными файловыми системами. +Они легче по объему, поскольку содержат только путь к файлу, а не данные самого файла. \ No newline at end of file diff --git a/monitoring/PROMETHEUS.MD b/monitoring/PROMETHEUS.MD index d5b5340..654caf8 100644 --- a/monitoring/PROMETHEUS.MD +++ b/monitoring/PROMETHEUS.MD @@ -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 - \ No newline at end of file +[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 минут. \ No newline at end of file