Initial commit

This commit is contained in:
Digital Studium
2023-03-08 18:12:15 +03:00
commit 06eb6898c7
23 changed files with 880 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
---
title: "Linux: Как создать логический том LVM"
date: "2022-05-15"
---
### Первый шаг: создание физического тома
После того, как вы присоединили диск к физическому серверу или к виртуальной машине, вам нужно набрать
команду:
```bash
sudo fdisk -l
```
<!--more-->
чтобы убедиться, что диск распознан операционной системой, а также чтобы идентифицировать имя диска. Вывод
команды будет примерно такой:
```plaintext
Disk /dev/vdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
```
После того, как вы идентифицировали имя диска (в нашем случае это `/dev/vdb`), вы можете создать
физический том с помощью команды:
```bash
sudo pvcreate /dev/vdb
```
Вы увидите такой вывод:
```plaintext
kostya@ubuntu-21-04:~$ sudo pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.
kostya@ubuntu-21-04:~$
```
### Второй шаг: создание группы томов
Теперь нужно создать группу томов. Делается это такой командой:
```bash
sudo vgcreate {vgname} {pvname}
```
в нашем случае команда будет выглядеть так:
```bash
sudo vgcreate vg-example /dev/vdb
```
Вывод команды будет такой:
```plaintext
kostya@ubuntu-21-04:~$ sudo vgcreate vg-example /dev/vdb
Volume group "vg-example" successfully created
kostya@ubuntu-21-04:~$
```
### Третий шаг: создание логического тома
Создание логического тома делается такой командой:
```bash
sudo lvcreate --size {size} --name {lv-name} {vg-name}
```
В нашем случае это будет:
```bash
sudo lvcreate --size 5G --name lv-example vg-example
```
Вы увидите такой вывод:
```plaintext
kostya@ubuntu-21-04:~$ sudo lvcreate --size 5G --name lv-example vg-example
Logical volume "lv-example" created.
kostya@ubuntu-21-04:~$
```
Если же вы хотите, чтобы логичекий том использовал всё свободное место в группе томов, то наберите команду:
```bash
sudo lvcreate --extents 100%FREE --name lv-example vg-example
```
### Четвёртый шаг: создание файловой системы
Чтобы создать файловую систему xfs, наберите команду:
```bash
sudo mkfs.xfs /dev/vg-example/lv-example
```
Вывод команды будет такой:
```plaintext
kostya@ubuntu-21-04:~$ sudo mkfs.xfs /dev/vg-example/lv-example
meta-data=/dev/vg-example/lv-example isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
kostya@ubuntu-21-04:~$
```
Для создания файловой системы ext4 замените команду mkfs.xfs на mkfs.ext4
### Пятый шаг: монтирование логического тома
Например, вы хотите смонтировать созданный логический том в папку `/opt`. В таком случае, добавьте такую
строку в файл `/etc/fstab`:
```bash
/dev/vg-example/lv-example /opt xfs defaults 0 1
```
После этого наберите команду:
```bash
sudo mount -a
```
Убедиться в том, что логический том успешно смонтирован, вы можете с помощью команды
```bash
df -h /opt
```
Вывод должен быть такой:
```plaintext
kostya@ubuntu-21-04:~$ df -h /opt/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg--random-lv--random 5.0G 68M 5.0G 2% /opt
kostya@ubuntu-21-04:~$
```

View File

@@ -0,0 +1,84 @@
---
title: "Linux: Как расширить логический том LVM"
date: "2022-05-15"
---
### Ситуация 1: новый диск
#### Первый шаг: создание физического тома
После того, как вы присоединили диск к физическому серверу или к виртуальной машине, вам нужно набрать команду:
```bash
sudo fdisk -l
```
<!--more-->
Это нужно, чтобы убедиться, что диск распознан операционной системой, а также чтобы идентифицировать имя диска. Вывод команды будет примерно такой:
```plaintext
Disk /dev/vdc: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
```
После того, как вы идентифицировали имя диска (в нашем случае это `/dev/vdc`), вы можете создать физический том с помощью команды:
```bash
sudo pvcreate /dev/vdc
```
Вы увидите такой вывод:
```plaintext
kostya@ubuntu-21-04:~$ sudo pvcreate /dev/vdc
Physical volume "/dev/vdc" successfully created.
kostya@ubuntu-21-04:~$
```
#### Второй шаг: расширение группы томов
Теперь можно расширить группу томов. Делается это такой командой:
```bash
sudo vgextend {vg-name} {pv-name}
```
В нашем случае это будет:
```bash
sudo vgextend vg-example /dev/vdc
```
Вы увидите такой вывод:
```plaintext
kostya@ubuntu-21-04:~$ sudo vgextend vg-example /dev/vdc
Physical volume "/dev/vdc" successfully created.
Volume group "vg-example" successfully extended
kostya@ubuntu-21-04:~$
```
#### Третий шаг: расширение логического тома
Расширение логического тома делается такой командой:
```bash
sudo lvextend --size +{size} {vg-name/lv-name}
```
В нашем случае это будет:
```bash
sudo lvextend --size +2G vg-example/lv-example
```
Вы увидите такой вывод:
```plaintext
kostya@ubuntu-21-04:~$ sudo lvextend --size +2G vg-example/lv-example
Size of logical volume vg-example/lv-example changed from 5.00 GiB (1280 extents) to 7.00 GiB (1792 extents).
Logical volume vg-example/lv-example successfully resized.
kostya@ubuntu-21-04:~$
```
Если же вы хотите, чтобы логичекий том использовал всё свободное место в группе томов, то наберите
команду:
```bash
sudo lvextend --extents +100%FREE vg-example/lv-example
```
#### Четвёртый шаг: расширение файловой системы
Если у вас файловая система `xfs`, то расширение делается такой командой:
```bash
sudo xfs_growfs /dev/{vg-name}/{lv-name}
```
В нашем случае это будет:
```bash
sudo xfs_growfs /dev/vg-example/lv-example
```
В случае с файловой системой ext4 замените команду `xfs_growfs` на `resize2fs`
### Ситуация 2: если изменился размер существующего диска
Иногда может измениться размер существующего диска, например, в случае с виртуальной машиной. В таком случае, первый шаг будет отличаться, второй шаг выполняться не будет, а остальные шаги будут такими же, как в ситуации с новым диском, описанной выше. На первом шаге нужно будет не создать физический том, а расширить существующий. Делается это такой командой:
```bash
sudo pvresize /dev/DISKNAME
```
Например,
```bash
sudo pvresize /dev/vdc
```

View File

@@ -0,0 +1,54 @@
---
title: "Linux: как ограничить размер папки /var/log"
date: "2022-06-06"
---
Иногда папка `/var/log` увеличивается в размере настолько, что становится причиной нехватки места на диске. Как ограничить рост размера этой папки? Выполнив два шага из этой статьи, вы можете поставить размер папки `/var/log` под контроль.<!--more-->
### Шаг 1. Ограничение размера логов journald
Логи всех сервисов systemd складываются в папку `/var/log/journal/` сервисом `journald`. Чтобы установить предельный размер этой папки, выполните следующие команды:
```bash
sudo bash -c 'echo "SystemMaxUse=100M" >> /etc/systemd/journald.conf'
sudo systemctl restart systemd-journald
```
Вместо размера `100M` вы можете указать любой другой размер, в единицах измерения `K, M, G, T`. После вышеуказанных команд вы можете убедиться, что размер папки `/var/log` стал иметь заданный размер с помощью команды: `du -sh /var/log/journal/`
### Шаг 2. Ограничение количества файлов логов, ротируемых logrotate
Logrotate каждый день совершает ротацию почти всех лог-файлов, находящихся в папке `/var/log`. Например, если я наберу команду `ls /var/log/kern*`, то я увижу, что помимо файла `/var/log/kern.log` у меня хранится ещё 4 файла, которые сохранил logrotate:
```bash
ls /var/log/kern*
```
```plaintext
/var/log/kern.log /var/log/kern.log.2.gz /var/log/kern.log.4.gz
/var/log/kern.log.1 /var/log/kern.log.3.gz
```
Чтобы ограничить количество лог-файлов, нужно отредактировать файл `/etc/logrotate.d/rsyslog`. Посмотрев содержимое файла `/etc/logrotate.d/rsyslog`, мы увидим, что дефолтное значение параметра `rotate` равно `4`:
```bash
cat /etc/logrotate.d/rsyslog
```
```plaintext
/var/log/syslog
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
```
Можно изменить `4` на какое-то другое значение, например, на `1`, чтобы хранился только один файл. В папке `/etc/logrotate.d/` вы найдёте также множество других конфигурационных файлов, относящихся к другим лог-файлам, там вы тоже можете изменить параметр `rotate`.

View File

@@ -0,0 +1,77 @@
---
title: "Linux: Как настроить мониторинг с уведомлениями в Telegram"
date: "2023-03-04"
---
В статье описывается, как настроить мониторинг с уведомлениями в Telergram с помощью Grafana, Prometheus, Alertmanager, Node-exporter и Cadvisor.
### Первый шаг: Клонирование репозитория
Зайдите на сервер или в локальный терминал и выполните следующие команды:
```bash
git clone https://github.com/digitalstudium/grafana-docker-stack.git
cd grafana-docker-stack
git checkout alertmanager
```
<!--more-->
### Второй шаг: установка внешнего адреса сервера
Откройте файл `docker-compose.yml` и в строках 22 и 38 измените адрес `127.0.0.1` на адрес того сервера, на котором вы хотите установить Prometheus.
### Третий шаг: создание бота в Telegram
В поиске Telegram наберите `Botfather` и перейдите по первой ссылке:
![Botfather поиск](/images/botfather1.png "Botfather поиск")
Затем нажмите `Start`:
![Botfather старт бота](/images/botfather2.png "Botfather старт бота")
После этого создайте бота, пользуясь инструкциями `Botfather`.
В итоге вы должны получить сообщение с токеном API:
![Botfather API токен](/images/botfather3.png "Botfather API токен")
Скопируйте данный токен и вставьте его в строку 14 файла `configs/alertmanager.yml` в качестве значения параметра `bot_token`.
Затем создайте группу в телеграм и добавьте созданного бота в эту группу. В эту группу будут приходить уведомления (алёрты).
### Четвертый шаг: Получение id группы
В группе, к которой вы добавили бота, напишите какую-ниюудь команду, например: `/my_id foobar`
Затем в браузере перейдите по ссылке
`https://api.telegram.org/botINSERT_BOT_TOKEN_HERE/getUpdates`, заменив `INSERT_BOT_TOKEN_HERE` на токен, созданный на шаге 3.
Вы должны получить примерно такую страницу:
![Telegram получение id чата](/images/chat_id.png "Telegram получение id чата")
Если на вашей странице ничего нет, попробуйте отправьте команду `/my_id foobar` в группу ещё раз.
Вам нужно скопировать значение chat id с этой страницы и вставить его в строку 15 файла `configs/alertmanager.yml` в качестве значения параметра `chat_id`. Обратите внимание, что значение параметра `chat_id` должно быть без кавычек и со знаком дефиса вначале.
### Пятый шаг: развёртывание docker стэка
Находясь в папке `grafana-docker-stack`, выполните следующие команды:
```bash
docker swarm init
docker stack deploy -c docker-compose.yml monitoring
```
Подождите 5-10 минут, затем выполните команду
```bash
docker ps
```
Вывод команды должен содержать 5 контейнеров: prometheus, grafana, alertmanager, node-exporter, grafana.
```plaintext
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46fba26e7234 gcr.io/cadvisor/cadvisor:v0.47.0 "/usr/bin/cadvisor -…" 5 days ago Up 5 days (healthy) 8080/tcp monitoring_cadvisor.1.q02qcn798dh0rydo1dzslylse
f212e3c66786 prom/alertmanager:v0.25.0 "/bin/alertmanager -…" 6 days ago Up 6 days 9093/tcp monitoring_alertmanager.1.oysziztrqnur7xr0hr82avunz
c16fb14929e2 prom/prometheus:v2.42.0 "/bin/prometheus --c…" 6 days ago Up 6 days 9090/tcp monitoring_prometheus.1.yslspi4fgjp7ic4f5e18gm99a
9bf01ce6b7a1 grafana/grafana:9.3.6-ubuntu "/run.sh" 6 days ago Up 6 days 3000/tcp monitoring_grafana.1.mypn85x12xw37ucprr33knuwk
58efdb46f5c3 kindest/node:v1.25.3 "/usr/local/bin/entr…" 6 days ago Up 6 days 127.0.0.1:46579->6443/tcp kind-control-plane
ae15e453e517 prom/node-exporter:v1.5.0 "/bin/node_exporter …" 7 days ago Up 7 days 9100/tcp monitoring_node-exporter.1.uecim10ow12h1qlpox5lg0c5r
```
Если вы видите такой вывод, значит всё развернулось успешно. Если нет, попробуйте повторить все предыдущие шаги.
### Шестой шаг: проверить работоспособность
Зайдите по адресу [ip-адрес или доменное имя сервера]:3000
У вас должна открыться Grafana. Введите логин `admin` и пароль `admin`. Grafana попросит сменить пароль, смените его на любой другой.
В разделе Dashboard -> Browse -> General вы увидите 2 дашборда: Cadvisor exporter и Node Exporter Full. Откройте их и убедитесь, что всё работает.
## Итог
Теперь вы можете оценивать производительность сервера через графики Grafana.
Также вам будут приходить уведомления о проблемах с сервером в группу Telegram. Правила уведомлений можно настроить в файле `configs/prometheus/alert_rules.yml`