Архив автора: admin

Prometheus: Установка и настройка Prometheus Server.

1. Постановка задачи.




Задача: организовать мониторинг серверов и микросервисов, в режиме реального времени нужно отслеживать как состояние отдельных компонентов, так и состояние системы в целом.




2. Описание программ.




Prometheus server — центральное звено. Prometheus является открытой time series СУБД, написанной на языке Go и изначально разработанной в компании SoundCloud. Другими словами, эта штука хранит ваши метрики. Интересной особенностью Prometheus является то, что он сам тянет метрики с заданного множества сервисов (делает pull). За счет этого у Prometheus не могут забиться какие-то там очереди или вроде того, а значит мониторинг никогда не станет узким местом системы. Также проект интересен тем, что он принципиально не предлагает какого-либо горизонтального масштабирования или high availability. Дескать, третье тысячелетие на дворе — в случае чего просто возьмите машину помощнее, не выпендривайтесь.




Агенты, собирающие метрики и предоставляющие их в понятном для Prometheus’а виде. В зависимости от контекста называются экспортерами (exporter) или таргетами (target). Устанавливаются на целевые машины. Типичный представитель — Node Exporter — собирает данные о вычислительных ресурсах: загрузку процессора, памяти, диска и так далее. Есть куча других экспортеров. Например, cadvisor собирает данные о контейнерах. Есть экспортеры для Postgres’а, для Nginx’а и прочих сервисов. С точки зрения самого Prometheus’а они ничем принципиально не отличаются друг от друга, просто каждый собирает какие-то свои метрики. Можно писать свои экспортеры, если ничего из готового вам не подходит.




Node Exporter — сервис, задача которого заключается в экспорте информации о машине в формате, понятном Prometheus’у. Вообще, для Prometheus написано множество готовых exporter’ов практически под все существующие системы — всякие там web-серверы, СУБД, очереди сообщений, и так далее. В рамках этой заметки мы будем использовать только Node Exporter. Настройка других exporter’ов вряд ли будет сильно отличаться.




Alertmanager — менеджер уведомлений. Ни один инструмент мониторинга немыслим без компонента для рассылки уведомлений. В Prometheus для этой цели используется Alertmanager.




Grafana представляет собой открытый web-frontend к различным time series СУБД, таким, как GraphiteInfluxDBPrometheus. В общем, Grafana рисует для вас красивые графики, используя информацию из Prometheus. Характерно, что у Prometheus есть и собственный web-интерфейс. Однако он предельно прост и довольно неудобен. Поэтому даже сами разработчики Prometheus рекомендуют использовать Grafana.




Важно! Настройки, связанные с безопасностью, в рамках этого поста не рассматриваются. За информацией о том, как настроить firewall, поднять Nginx для какой-нибудь аутентификации, а также настроить TLS, обращайтесь к соответствующим более ранним заметкам. Обращаю ваше внимание на то, что по умолчанию Prometheus слушает все сетевые интерфейсы без какой-либо аутентификации и шифрования. Grafana имеет кое-какую аутентификацию, но также слушает все интерфейсы и не имеет шифрования.




Вы можете найти более полный список официальных экспортеров и экспортеров сообщества на веб-сайте Prometheus.




Ссылка на сайт разработчика: https://prometheus.io/download/.




Ссылки разработчика на GitHubhttps://github.com/prometheus/prometheus/releases/.




3. Общая подготовка системы.




Обновим систему:




# yum -y update && yum -y upgrade




Удалим SELinux:




# yum -y remove selinux*




Перезагрузим CentOS 7:




# shutdown -r now




4. Настройка синхронизации времени.




Выполним настройку службы синхронизации времени по действиям. Если этого не сделать, если не синхронизировать время, то позднее в работе Prometheus будут ошибки или вообще работать не будет.







Если интересно узнать всё поподробнее о настройках времени и серверов NTP, то пройдите по ссылке на инструкцию «CentOS 7: Настройка даты и времени, пояса, автоматическая синхронизация мирового времени (Network Time Protocol)».




Выполним настройку не вдаваясь в подробности.




Для того, чтобы в системе были доступны часовые пояса, установите утилиту tzdata:




# yum -y install tzdata




Чтобы сменить часовой пояс, можете воспользоваться специальной утилитой timedatectl, которая входит в состав systemd.




# timedatectl set-timezone Asia/Yekaterinburg




Заменим часовой пояс на Asia/Yekaterinburg:




Делаем бэкап файла localtime:




# mv /etc/localtime /etc/localtime.bak




# ln -s /usr/share/zoneinfo/Asia/Yekaterinburg /etc/localtime




Установим chrony.




Внимание! В CentOS 7 данная утилита уже идет в комплекте даже при минимальной комплектации установщика. Устанавливать отдельно в CentOS 7 утилиту chrony не надо.




Ссылка: «CentOS 7: Настройка синхронизация времени по Network Time Protocol. Утилита ntp».




Основные преимущества chrony:




  • высокая скорость и точность синхронизации;
  • корректная работа при отсутствии доступа к эталонным часам (ntpd требуются регулярные запросы);
  • по умолчанию не меняет сразу время при синхронизации, чтобы не нарушить работу программ.




# yum -y install chrony




Как и любой другой сервис, после установки chrony нужно включить и добавить в автозагрузку:




# systemctl start chronyd

# systemctl enable chronyd




Для проверки статуса chrony используется следующая команда.




# systemctl status chronyd




Проверяем, нормально ли запустился:







Все в порядке, сервис настроен и работает. После запуска он автоматически синхронизирует время. Теперь наши часы будут автоматически синхронизироваться с сервером времени в интернете.




# timedatectl status







Чтобы проверить, синхронизирован ли chrony на самом деле. Как и у ntp, у chrony есть интерфейс командной строки chronyc. Мы будем использовать его программу командной строки chronyc, которая имеет опцию отслеживания для предоставления соответствующей информации.




# chronyc tracking







Чтобы проверить информацию об источниках chrony, можно выполнить следующую команду:




# chronyc sources







С временем закончили. Всё работает. Идем дальше!




5. Получение и запуск Prometheus Service.




Установим текстовый редактор mc, download-менеджер wget, архиватор tar:




# yum -y install mc wget tar




Зайдем на страничку разработчика системы Prometheus и скопируем ссылку на скачивание архива с программой:







Ссылка на сайт разработчика: https://prometheus.io/download/.




Ссылки разработчика на GitHubhttps://github.com/prometheus/prometheus/releases/.




Переместимся в каталог пользователя под которым работаем:




# cd ~




Скачаем данный архив на сервер CentOS 7, в локальный каталог пользователя:




# wget https://github.com/prometheus/prometheus/releases/download/v2.17.1/prometheus-2.17.1.linux-amd64.tar.gz




Проверим, что он в каталоге:




# ls




Ответ: список содержимого каталога + файл-архив prometheus-2.17.1.linux-amd64.tar.gz.




prometheus-2.17.1.linux-amd64.tar.gz




Создадим и добавим «бездомного» и «бесконсольного» служебного пользователя по имени prometheus.




# useradd --no-create-home --shell /bin/false prometheus




Создадим пару служебных каталогов:




# mkdir /etc/prometheus

# mkdir /var/lib/prometheus




Добавим права на их использование пользователем prometheus:




# chown prometheus:prometheus /etc/prometheus

# chown prometheus:prometheus /var/lib/prometheus




Распакуем, ранее скачанный, архив с программой prometheus-2.17.1.linux-amd64.tar.gz.




# tar -xvzf prometheus-2.17.1.linux-amd64.tar.gz




Проверим результат:




# ls




Ответ: список содержимого каталога + каталог prometheus-2.17.1.linux-amd64.




prometheus-2.17.1.linux-amd64




Рассортируем содержимое каталога prometheus-2.17.1.linux-amd64.




Скопируем бинарные файлы ‘prometheus‘ and ‘promtool‘ в каталог ‘/usr/local/bin‘.




# cp prometheus-2.17.1.linux-amd64/prometheus /usr/local/bin/

# cp prometheus-2.17.1.linux-amd64/promtool /usr/local/bin/




Добавим права на их использование пользователем prometheus:




# chown prometheus:prometheus /usr/local/bin/prometheus

# chown prometheus:prometheus /usr/local/bin/promtool




# chmod -R 700 /usr/local/bin/prometheus

# chmod -R 700 /usr/local/bin/promtool




Скопируем ‘consoles‘ и ‘console_libraries‘ каталоги из каталога prometheus-2.17.1.linux-amd64 в каталог ‘/etc/prometheus‘.




# cp -r prometheus-2.17.1.linux-amd64/consoles /etc/prometheus

# cp -r prometheus-2.17.1.linux-amd64/console_libraries /etc/prometheus

# cp -r prometheus-2.17.1.linux-amd64/prometheus.yml /etc/prometheus




Добавим права на их использование пользователем prometheus:




# chown -R prometheus:prometheus /etc/prometheus/consoles

# chown -R prometheus:prometheus /etc/prometheus/console_libraries

# chown -R prometheus:prometheus /etc/prometheus/prometheus.yml




Важно! Конфигурационный файл Prometheus использует формат YAML, который строго запрещает табуляцию и требует двух пробелов для отступов. Prometheus не удастся запустить, если конфигурационный файл некорректно отформатирован.




В глобальных настройках (раздел global) задайте интервал по умолчанию для сбора метрик. Обратите внимание, что Prometheus будет применять эти настройки для каждого экспортера, если только глобальные переменные не переопределяются индивидуальными настройками отдельного экспортера.




Согласно этому значению scrape_interval Prometheus будет собирать метрики своих экспортеров каждые 15 секунд, что достаточно для большинства экспортеров.




global:

scrape_interval: 15s




Теперь добавьте Prometheus в список экспортеров, чтобы собирать его метрики. Для этого используйте директиву scrape_configs:




...

scrape_configs:

- job_name: 'prometheus_server'

scrape_interval: 5s

static_configs:

- targets: ['localhost:9090']




С помощью job_name Prometheus маркирует экспортеры в запросах и графах, потому тут лучше выбрать описательное имя.




Поскольку Prometheus экспортирует важные данные о себе, которые используются для мониторинга производительности и отладки, можно переопределить глобальную директиву scrape_interval с 15 секунд до 5 секунд, чтобы данные обновлялись чаще.




С помощью директив static_configs и targets Prometheus определяет, где запускать экспортеры. Поскольку этот конкретный экспортер запущен на том же сервере, что и Prometheus, можно использовать localhost вместо IP-адреса и порт по умолчанию — 9090 порт.




Внимание! В последних версиях Prometheus конфигурационный файл уже идет в комплекте и теперь его особо модифицировать не требуется. Все и так хорошо работает!




Настроим конфигурационный файл Prometheus /etc/prometheus/prometheus.yml под наши нужды, но перед этим копируем его, на всякий случай:




# cp /etc/prometheus/prometheus.yml /etc/prometheus/prometheus.yml.original




Открываем для редактирования:




# mcedit /etc/prometheus/prometheus.yml




Добавим в него следующие строки по смыслу синтаксиса файла конфигурации:




# my global config

global:

  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).



# Alertmanager configuration

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"



# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

  # The job name is added as a label `job=` to any timeseries scraped from this config.

  - job_name: 'prometheus_server'

    scrape_interval: 5s

    metrics_path: /metrics

    static_configs:

    - targets: ['localhost:9090']




Сохраним файл и выйдем из тестового редактора.




Проверим синтаксис:




# promtool check config /etc/prometheus/prometheus.yml




Ответ:







Подробнее можно узнать о правилах написания файла конфигурации на сайте разработчика программы: https://prometheus.io/docs/prometheus/latest/configuration/configuration/




Добавим права на его использование пользователем prometheus:




# chown prometheus:prometheus /etc/prometheus/prometheus.yml




Создадим конфигурационный файл службы Prometheus Service:




# mcedit /etc/systemd/system/prometheus.service




Этот файл сообщает systemd, что Prometheus нужно запускать в качестве пользователя prometheus, его конфигурационный файл находится в каталоге /etc/prometheus/prometheus.yml, а данные и метрики хранятся в каталоге /var/lib/prometheus.




Также нелишним будет знать некоторые особенности устройства Prometheus. В частности, по умолчанию все данные хранятся в течение 15 дней, метрики собираются раз в 5-15 секунд, а одна метрика в среднем занимает два байта на сэмпл. Обладая этой информацией, и зная количество метрик, можно прикинуть, сколько дискового пространства вам понадобится для их хранения.




Внимание! Хранилище Prometheus не позиционируется, как супер надежное. Если у вас очень ценные метрики, рекомендуется сохранять их куда-то еще через адаптеры. Ещё со временем метрики Prometheus из разных источников будут занимать приличное количество места на диске, поэтому заранее продумайте, где будете хранить большие объемные файлы, которые будут расти и расти!




Если что, то можно сделать потом ссылку на каталог, который фактически будет храниться в другом, более удобном месте.




Информация как это сделать имеется в инструкции «CentOS 7: Как создать и искать символические ссылки (ln)».




Добавим в него следующие строки:




[Unit]

Description=Prometheus

Wants=network-online.target

After=network-online.target



[Service]

User=prometheus

Group=prometheus

Type=simple

ExecStart=/usr/local/bin/prometheus 

--config.file=/etc/prometheus/prometheus.yml 

--storage.tsdb.path=/var/lib/prometheus/ 

--web.console.templates=/etc/prometheus/consoles 

--web.console.libraries=/etc/prometheus/console_libraries

ExecReload=/bin/kill -HUP $MAINPID

Restart=on-failure



[Install]

WantedBy=multi-user.target




или поподробнее со всякими фишками и включенным режимом администрирования:




[Unit]

Description=Prometheus

Wants=network-online.target

After=network-online.target



[Service]

User=prometheus

Group=prometheus

Type=simple

WorkingDirectory=/etc/prometheus/

# RuntimeDirectory=prometheus

# RuntimeDirectoryMode=0750

ExecStart=/usr/local/bin/prometheus 

--config.file=/etc/prometheus/prometheus.yml 

--storage.tsdb.retention=365d 

--storage.tsdb.path=/var/lib/prometheus/ 

--storage.tsdb.max-block-duration=2h 

--web.console.templates=/etc/prometheus/consoles 

--web.console.libraries=/etc/prometheus/console_libraries 

--web.enable-lifecycle 

--web.enable-admin-api 

--web.listen-address=:9090 

--log.level=info



ExecReload=/bin/kill -HUP $MAINPID

Restart=on-failure

LimitNOFILE=10000

TimeoutStopSec=20



StandardOutput=syslog

StandardError=syslog

SyslogIdentifier=prometheus



[Install]

WantedBy=multi-user.target




Сохраним файл и выйдем из тестового редактора.




Перезагрузим системные службы systemd service.




# systemctl daemon-reload




Стартуем Prometheus service:




# systemctl start prometheus




Прописываем в автозапуск CentOS 7:




# systemctl enable prometheus




Проверим успех запуска:




# systemctl status prometheus







Вывод описывает состояние Prometheus, основной идентификатор процесса (PID), использование памяти и так далее.




Внимание! Бывает, что всё сделано правильно, но ничего упорно не стартует. Сверьтесь с писком возможных ошибок с вашей стороны.




1. Иногда бывает, что у пользователя prometheus теряется доступ к /usr/local/bin/prometheus. Заново выдайте права 700 на /usr/local/bin/prometheus и запустите службу снова. Пару раз так было так на других дистрибутивах Linux, хотя визуально всё хорошо и права стоят на все операции.




# chown prometheus:prometheus /usr/local/bin/prometheus




# chmod -R 700 /usr/local/bin/prometheus




2. Вы отредактировали файл etc/prometheus/prometheus.yml и сохранили его не в кодировке UTF-8. Файл существует, но не считывается. Меняйте кодировку на UTF-8.




3. Если вы получили сообщение об ошибке, убедитесь, что не допустили ошибок в синтаксисе YAML в файле конфигурации, а затем следуйте инструкциям на экране, чтобы устранить проблему. Синтаксис этого файла очень капризный, даже один лишний пробел или перенос строки, которые вы не заметили, могут не позволять запустить службу. Не расстраивайтесь и проверьте всё внимательно.




Если состояние сервиса не active, следуйте предыдущим инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить. Возможно у вас просто опечатка в файле конфигурации оказалась.




Откроем порт 9090.




  • Если firewalld:




# firewall-cmd --zone=public --add-port=9090/tcp --permanent

# systemctl reload firewalld




  • Если iptables:




Открываем файл конфигурации iptables текстовым редактором:




# mcedit /etc/sysconfig/iptables




В разделе ‘OUTPUT ACCEPT‘, добавляем строку:




-A INPUT -p tcp -m tcp --dport 9090 -m state --state NEW -j ACCEPT




Перезапускаем iptables:




# sudo systemctl restart iptables




Проверяем, что Prometheus отдает свои собственные метрики:




# curl 'localhost:9090/metrics'







Теперь можно установить дополнительный экспортер для создания метрик о ресурсах сервера.




6. Prometheus Server web-интерфейс.




Зайдем в web-интерфейс по адресу:




# http://Server-IP:9090/graph




Если всё было сделано правильно и проброшен порт 9090, вас встретит страница приветствия:







7. Получение и запуск Node Exporter (localhost).




Первым делом настроим Prometheus node exporter на Prometheus Server.




Чтобы расширить стандартные возможности Prometheus, установите дополнительный экспортер под названием Node ExporterNode Exporter предоставляет подробную информацию о системе, включая использование процессора, диска и памяти.




Скопируем ссылку на соответствующий модуль с сайта разработчиков:







Ссылка на сайт разработчика: https://prometheus.io/download/.




Ссылки разработчика на GitHubhttps://github.com/prometheus/prometheus/releases/.




Переместимся в каталог пользователя под которым работаем:




# cd ~




Скачаем данный архив на сервер CentOS 7, в локальный каталог пользователя:




# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz




Проверим, что он в каталоге:




# ls




Ответ: список содержимого каталога + файл-архив node_exporter-0.18.1.linux-amd64.tar.gz.




node_exporter-0.18.1.linux-amd64.tar.gz




Распакуем скачанный архив:




# tar -xvzf node_exporter-0.18.1.linux-amd64.tar.gz




Создадим и добавим «бездомного» и «бесконсольного» служебного пользователя по имени ‘nodeusr‘ для Node Exporter.




# useradd --no-create-home --shell /bin/false nodeusr




Переместим бинарные файлы в каталог ‘/usr/local/bin‘ из каталога скачанного и распакованного архива.




# mv node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin/




Добавим права на их использование пользователем nodeusr:




# chown nodeusr:nodeusr /usr/local/bin/node_exporter




Создадим конфигурационный файл службы Node Exporter:




# mcedit /etc/systemd/system/node_exporter.service




Добавим в него следующие строки:




[Unit]

Description=Node Exporter

Wants=network-online.target

After=network-online.target



[Service]

User=nodeusr

Group=nodeusr

Type=simple

ExecStart=/usr/local/bin/node_exporter

ExecReload=/bin/kill -HUP $MAINPID

Restart=on-failure



[Install]

WantedBy=multi-user.target




Сохраним файл и выйдем из тестового редактора.




Коллекторы определяют, какие метрики генерирует Node Exporter. Полный список коллекторов Node Exporter, включая включенные по умолчанию и устаревшие, можно найти в файле README для Node Exporter.




Чтобы переопределить список коллекторов, используйте флаг --collectors.enabled.




...

ExecStart=/usr/local/bin/node_exporter --collectors.enabled meminfo,loadavg,filesystem

...




В таком случае Node Exporter будет генерировать метрики, используя только коллекторы meminfoloadavg и filesystem. Вы можете использовать столько коллекторов, сколько вам нужно, но обратите внимание, что при перечислении коллекторов пробелов перед запятыми или после них нет.




Перезагрузим системные службы systemd service.




# systemctl daemon-reload




Стартуем Prometheus service:




# systemctl start node_exporter




Прописываем в автозапуск CentOS 7:




# systemctl enable node_exporter




Проверим успех запуска:




# systemctl status node_exporter







Здесь вы увидите состояние Node Exporter, основной идентификатор процесса (PID), использование памяти и так далее.




Внимание! Иногда бывает, что у пользователя nodeusr нет доступа к /usr/local/bin/node_exporter, хотя визуально всё хорошо и права стоят на все операции. Заново выдайте права 700 на /usr/local/bin//node_exporterи запустите службу снова. Было так на других дистрибутивах Linux.




Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.




Откроем порт 9100.




  • Если firewalld:




# firewall-cmd --zone=public --add-port=9100/tcp --permanent

# systemctl reload firewalld




  • Если iptables:




Открываем файл конфигурации iptables текстовым редактором:




# mcedit /etc/sysconfig/iptables




В разделе ‘OUTPUT ACCEPT‘, добавляем строку:




-A INPUT -p tcp -m tcp --dport 9100 -m state --state NEW -j ACCEPT




Перезапускаем iptables:




# sudo systemctl restart iptables




Проверяем, что метрики отдаются:




# curl 'localhost:9100/metrics'







8. Node Exporter web-интерфейс.




Зайдем в web-интерфейс по адресу:




# http://IP-Address:9100/metrics




Если всё было сделано правильно и проброшен порт 9100, вас встретит страница приветствия с большим количеством различных строк:







9. Настройка взаимодействия Prometheus и Node Exporter.




Добавим конфигурацию Node Exporter задачи для Prometheus Server.




Prometheus собирает только метрики экспортеров, указанных в разделе scrape_configs его конфигурационного файла. Добавьте в этот файл экспортер Node Exporter.




Зайдем на Prometheus Server и модифицируем prometheus.yml в каталоге /etc/prometheus/.




Редактируем файл:




# mcedit /etc/prometheus/prometheus.yml




Добавляем в файл конфигурации в блок scrape config в самый конец раздела:





- job_name: 'node_exporter_prometheus'
  scrape_interval: 5s
  metrics_path: /metrics
  static_configs:
  - targets: ['localhost:9100']




Сохраним файл и выйдем из тестового редактора.




Поскольку этот экспортер работает на том же сервере, что и Prometheus, можно использовать localhost вместо IP-адреса и порт по умолчанию Node Exporter — это 9100 порт.




Весь файл конфигурации должен выглядеть так:




# my global config

global:

  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).



# Alertmanager configuration

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"



# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

  # The job name is added as a label `job=` to any timeseries scraped from this config.

  - job_name: 'prometheus_server'

    scrape_interval: 5s

    metrics_path: /metrics

    static_configs:

    - targets: ['localhost:9090']



  - job_name: 'node_exporter_prometheus'

    scrape_interval: 5s

    metrics_path: /metrics

    static_configs:

    - targets: ['localhost:9100']




Сохраним и выйдем из текстового редактора.




Проверим синтаксис:




# promtool check config /etc/prometheus/prometheus.yml




Ответ:







Чтобы настройки активировались, перезапустим службу:




# systemctl restart prometheus




Проверим успех запуска:




# systemctl status prometheus







Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.




Внимание! Если вы получили сообщение об ошибке, убедитесь, что не допустили ошибок в синтаксисе YAML в файле конфигурации, а затем следуйте инструкциям на экране, чтобы устранить проблему. Синтаксис этого файла очень капризный, даже один лишний пробел или перенос строки, которые вы не заметили, могут не позволять запустить службу. Не расстраивайтесь и проверьте всё внимательно.




Зайдем в web-оболочку Prometheus Server и проверим targets.




Зайдем в web-интерфейс по адресу:




# http://IP-Address:9090/targets




Примерный вид в браузере:







10. Получение и запуск MySQL Exporter (localhost).




Создадим служебного пользователя сбора метрик MySQL Server базы данных.




Войдите в свою базу данных и выполните следующие команды:




# mysql -u root -p




> CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;

> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'localhost';

> FLUSH PRIVILEGES;

> exit




Скачаем mysqld_exporter с официальной странички разработчиков: https://prometheus.io/download/.




Для этого получим ссылку для закачивания архива с программой.







Ссылка на сайт разработчика: https://prometheus.io/download/.




Ссылки разработчика на GitHubhttps://github.com/prometheus/prometheus/releases/.




Переместимся в каталог пользователя под которым работаем:




# cd ~




Скачаем данный архив на сервер CentOS 7, в локальный каталог пользователя:




# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz




Проверим, что он в каталоге:




# ls




Ответ: список содержимого каталога + файл-архив mysqld_exporter-0.12.1.linux-amd64.tar.gz.




mysqld_exporter-0.12.1.linux-amd64.tar.gz




Распакуем скачанный архив:




# tar -xvzf mysqld_exporter-0.12.1.linux-amd64.tar.gz




Создадим и добавим «бездомного» и «бесконсольного» служебного пользователя по имени ‘mysqld_exporter‘ для MySQL Exporter.




# useradd --no-create-home --shell /bin/false mysqld_exporter




Переместим бинарный файл в каталог ‘/usr/local/bin‘ из каталога скачанного и распакованного архива.




# mv mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter /usr/local/bin/




Добавим права на их использование пользователем mysqld_exporter:




# chown mysqld_exporter:mysqld_exporter /usr/local/bin/mysqld_exporter




Создадим рабочий каталог для MySQL Exporter:




# mkdir -p /etc/mysql_exporter




Создадим MySQL файл с паролем для MySQL Exporter.




# touch /etc/mysql_exporter/.my.cnf




# mcedit /etc/mysql_exporter/.my.cnf




Добавим в него строки, которые будут содержать строки вашего логина и пароля из примера по созданию служебного пользователя сбора метрик MySQL Server базы данных:




[client]

user=mysqld_exporter

password=password




Сохраним и выйдем из файла.




Добавим права на каталог для пользователя mysqld_exporter:




# chown -R mysqld_exporter:mysqld_exporter /etc/mysql_exporter




Добавим свойства 600 на каталог:




# chmod 600 /etc/mysql_exporter/.my.cnf




Создадим конфигурационный файл службы MySQL Exporter:




# mcedit /etc/systemd/system/mysql_exporter.service




Добавим в него следующие строки:




[Unit]

Description=MySQL Exporter Service

Wants=network.target

After=network.target



[Service]

User=mysqld_exporter

Group=mysqld_exporter

Type=simple

Environment="DATA_SOURCE_NAME=mysqld_exporter:password@tcp(127.0.0.1:3306)/"

ExecStart=/usr/local/bin/mysqld_exporter 

--config.my-cnf /etc/mysql_exporter/.my.cnf

--collect.global_status 

--collect.info_schema.innodb_metrics 

--collect.auto_increment.columns 

--collect.info_schema_processlist 

--collect.binlog_size 

--collect.global_variables 

--collect.info_schema.tablestats 

--collect.global_variables 

--collect.info_schema.query_response_time 

--collect.info_schema.userstats 

--collect.info_schema.tables 

--collect.perf_schema.tablelocks 

--collect.perf_schema.file_events 

--collect.perf_schema.eventswaits 

--collect.perf_schema.indexiowaits 

--collect.perf_schema.tableiowaits 

--collect.slave_status 

Restart=always



[Install]

WantedBy=multi-user.target




Перезагрузим системные службы systemd service.




# systemctl daemon-reload




Стартуем MySQL Exporter service:




# systemctl start mysql_exporter




Прописываем в автозапуск CentOS 7:




# systemctl enable mysql_exporter




Проверим успех запуска:




# systemctl status mysql_exporter







Здесь вы увидите состояние MySQL Exporter, основной идентификатор процесса (PID), использование памяти и так далее.




Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.




Откроем порт 9104.




Если firewalld:




# firewall-cmd --zone=public --add-port=9104/tcp --permanent

# systemctl reload firewalld




Если iptables:




Открываем файл конфигурации iptables текстовым редактором:




# mcedit /etc/sysconfig/iptables




В разделе ‘OUTPUT ACCEPT‘, добавляем строку:




-A INPUT -p tcp -m tcp --dport 9104 -m state --state NEW -j ACCEPT




Перезапускаем iptables:




# sudo systemctl restart iptables




Проверяем, что метрики отдаются:




# curl 'localhost:9104/metrics'







11. MySQL Exporter web-интерфейс.




Зайдем в web-интерфейс по адресу:




# http://IP-Address:9104/metrics




Если всё было сделано правильно и проброшен порт 9104, вас встретит страница приветствия с большим количеством различных строк:







12. Настройка взаимодействия Prometheus и MySQL Exporter.




Добавим конфигурацию MySQL Exporter задачи для Prometheus Server.




Prometheus собирает только метрики экспортеров, указанных в разделе scrape_configs его конфигурационного файла. Добавьте в этот файл экспортер MySQL Exporter.




Зайдем на Prometheus Server и модифицируем prometheus.yml в каталоге /etc/prometheus/.




Редактируем файл:




# mcedit /etc/prometheus/prometheus.yml




Добавляем в файл конфигурации в блок scrape config в самый конец раздела:




- job_name: 'mysql_exporter_prometheus'

  scrape_interval: 5s

  metrics_path: /metrics

  static_configs:

  - targets: ['localhost:9104']





Сохраним файл и выйдем из тестового редактора.




Поскольку этот экспортер работает на том же сервере, что и Prometheus, можно использовать localhost вместо IP-адреса и порт по умолчанию MySQL Exporter — это 9104 порт.




Весь файл конфигурации должен выглядеть так:




g# my global config

global:

  scrape_interval:     5s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 5s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).



# Alertmanager configuration

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"



# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

  # The job name is added as a label `job=` to any timeseries scraped from this config.

  - job_name: 'abiturientu_ru'

    scrape_interval: 5s

    metrics_path: /metrics

    static_configs:

    - targets: ['localhost:9090']



  - job_name: 'node_exporter_abiturientu_ru'

    scrape_interval: 5s

    metrics_path: /metrics

    static_configs:

    - targets: ['localhost:9100']



  - job_name: 'mysql_exporter_abiturientu_ru'

    scrape_interval: 5s

    metrics_path: /metrics

    static_configs:

    - targets: ['localhost:9104']




Сохраним и выйдем из текстового редактора.




Проверим синтаксис:




# promtool check config /etc/prometheus/prometheus.yml




Ответ:







Чтобы настройки активировались, перезапустим службу:




# systemctl restart prometheus




Проверим успех запуска:




# systemctl status prometheus







Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.




Если вы получили сообщение об ошибке, убедитесь, что не допустили ошибок в синтаксисе YAML в файле конфигурации, а затем следуйте инструкциям на экране, чтобы устранить проблему. Синтаксис этого файла очень капризный, даже один лишний пробел или перенос строки, которые вы не заметили, могут не позволять запустить службу. Не расстраивайтесь и проверьте всё внимательно.




Зайдем в web-оболочку Prometheus Server и проверим targets.







Теперь можно будет получать метрики MySQL Exporter и использовать их в Grafana.




13. Проверка работы Prometheus Server.




# http://Server-IP:9090/graph




Для начала проверьте статус Prometheus и Node Explorer, открыв меню Status в верхней части экрана, а затем выбрав Targets.




Нажимаем Status —> Targets:







Поскольку Prometheus собирает и свои данные и другие метрики, в состоянии UP вы должны увидеть все цели, которые ему ставили.







Если экспортера нет или вы видите сообщение об ошибке, проверьте состояние сервисов с помощью следующих команд:




# systemctl status prometheus

# systemctl status node_exporter

# systemctl status mysql_exporter




В выводе должна быть строка Activeactive (running). Если это не так, или активный сервер работает некорректно, вернитесь на несколько шагов обратно по инструкции, чтобы исправить ошибки.




Чтобы убедиться, что экспортеры работают правильно, выполните несколько выражений Node Exporter.




Вы можете щелкнуть Graph и запросить любые метрики сервера, а затем нажать кнопку выполнить, чтобы показать выходные данные. Он покажет вывод консоли.




Браузер запросов. Для примера запросим вручную параметр node_memory_MemAvailable_bytes.







Консольный выход node_memory_MemAvailable_bytes. Нажимаем клавишу Execute —>затем вкладку Graph:







В ответ получаем график метрики node_memory_MemAvailable_bytes.







Наведите указатель мыши на график, чтобы получить дополнительную информацию о какой-либо конкретной точке вдоль осей X и Y.




Если вы хотите проверить результаты, выполните команду free в терминале. Флаг -h отображает вывод free в удобочитаемом формате и выводит сумму в мегабайтах.




# free -h




Этот вывод содержит сведения об использовании памяти, включая доступную память в столбце available.







Небольшая разница в результатах обусловлена, что сервер CentOS 7 работает в своем рабочем режиме и пока я работал с консолью состояние могло измениться. В целом метрика и запрос не врут и не противоречат друг другу.




Помимо базовых операторов язык запросов Prometheus также предоставляет множество функций для агрегирования результатов.




Чтобы узнать больше о расширениях Prometheus, ознакомьтесь со списком доступных экспортеров, а также с официальным веб-сайтом Grafana.




В повседневной жизни вы вряд ли будете смотреть графики в этом интерфейсе. Гораздо приятнее смотреть графики в Grafana.




Приглашаю проследовать к изучению следующего материала из этого цикла статей — Часть II: статья «CentOS 7: Установка и настройка Grafana Server».




14. Менеджер тревог Alertmanager.




Alertmanager — это про алерты. Первое время алертов у вас не будет, поэтому сейчас его можно не ставить. Позднее я напишу отдельную инструкцию.




15. Оригиналы источников информации.




  1. prometheus.io «Configuration».
  2. fosslinux.com «How to install and configure Prometheus on CentOS 7».
  3. laurvas.ru «Осваиваем мониторинг с Prometheus. Часть 1. Знакомство и установка.».
  4. github.com «No datapoints found. #1022».
  5. eax.me «Устанавливаем связку из Prometheus и Grafana».
  6. habr.com «Мониторинг сервисов с Prometheus».
  7. 8host.com «Установка Prometheus в Ubuntu».
  8. stackoverflow.com «mysqld_exporter DATA SOURCE NAME in mysqld_exporter.service».
  9. dmosk.ru «Установка Prometheus + Alertmanager + node_exporter на Linux».




Источник: https://hamsterden.ru/prometheus/



2021-08-15T20:21:55
Software

Установка и использование Grafana Loki на Linux

В нашей инструкции мы рассмотрим процесс установки и настройки Grafana Loki в качестве сервера сбора логов. Есть несколько способов ее установки — Helm chart, в качестве контейнера Docker, скачать готовый бинарник или собрать его из исходника. Мы выполним установку из последнего на систему Linux. Также, в качестве примера, мы прочитаем лог веб-сервера nginx и сделаем его вывод в Grafana.




Подготовка




Прежде чем устанавливать Loki, подготовим наш сервер для работы.




Установка пакетов




Для загрузки исходников нам понадобиться загрузить некоторые файлы. Для этого в системе должны быть установлены соответствующие пакеты. В зависимости от типа системы процесс установки будет незначительно отличаться.




а) на системах Red Hat:




yum install git wget




б) для систем на основе Debian:




apt-get install git wget




Установка Go




Для компиляции исходника, нам необходимо установить Golang. Для этого переходим на страницу загрузки и копируем ссылку на архив с его последней версией:







Воспользовавшись ссылкой, скачиваем архив на наш сервер:




wget https://golang.org/dl/go1.15.6.linux-amd64.tar.gz




* на момент написания инструкции, последняя версия была 1.15.6.




Распаковываем архив в каталог /usr/local:




tar -v -C /usr/local -xzf go*.tar.gz




Открываем файл:




vi /etc/profile




Добавляем в самый низ строку:




export PATH=$PATH:/usr/local/go/bin




Один раз выполняем данную команду:




export PATH=$PATH:/usr/local/go/bin




Проверяем, что go установлен и готов выполнять команды:




go version




Мы должны увидеть версию скачанного пакета.




Настройка безопасности




1. Брандмауэр




В зависимости от используемого брандмауэра, необходимо выполнить следующие настройки.




а) если используем iptables (по умолчанию, в системах на базе Debian):




iptables -I INPUT 1 -p tcp --dport 3100 -j ACCEPT




* данная команда добавит правило на разрешение порта 3100 (на котором, по умолчанию, запускается Grafana Loki).




Для сохранения правил устанавливаем пакет:




apt-get install iptables-persistent




Сохранение правил теперь можно выполнить командой: 




netfilter-persistent save




б) если используем firewalld (по умолчанию, в системах на базе Red Hat):




firewall-cmd --permanent --add-port=3100/tcp

firewall-cmd --reload




* данная команда добавит правило на разрешение порта 3100 (на котором, по умолчанию, запускается Grafana Loki).




2. SELinux




Как правило, в системах на базе Red Hat активирована дополнительная система безопасности. В нашей инструкции мы ее отключаем командами:




setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config




* первая команда вводится до разового отключения SELinux. Вторая не дает ему запуститься после перезагрузки.




Установка




Установка Grafana Loki сводится к загрузке готового бинарника или исходника с последующей компиляцией. Также мы настроим юнит в systemd для работы приложения в качестве сервиса.




Копирование бинарника и конфигурационного файла




Переходим в каталог:




cd /usr/src/




Загружаем исходные файлы проекта:




git clone https://github.com/grafana/loki




Переходим в каталог loki:




cd loki/




Запускаем компиляцию бинарника:




go build ./cmd/loki




В текущем каталоге появится файл loki — перенесем его в каталог /usr/local/bin:




mv loki /usr/local/bin/




Создадим каталог:




mkdir /etc/loki




… и перенесем в него конфигурационный файл:




mv cmd/loki/loki-local-config.yaml /etc/loki/




В конфиге, который идет в исходнике в качестве рабочего каталога для Grafana Loki используется /tmp — мы это исправим двумя командами:




sed -i 's//tmp/wal//opt/loki/wal/g' /etc/loki/loki-local-config.yaml




* первой командой мы меняем настройку dir для wal (журнала предзаписи). 




sed -i 's//tmp/loki//opt/loki/g' /etc/loki/loki-local-config.yaml




* в данном примере мы заменили путь для storage_configworking_directory и ruler storage на /opt/loki.




Создаем каталог:




mkdir /opt/loki




Выполним первый тестовый запуск сервиса:




/usr/local/bin/loki -config.file=/etc/loki/loki-local-config.yaml




Открываем браузер и переходим по адресу http://192.168.0.15:3100/metrics, где 192.168.0.15 — IP-адрес нашего сервера Grafana Loki. Мы должны увидеть страницу с метриками:







Значит наш сервис запустился и нормально работает. Можно прервать его работу на сервере комбинацией клавиш Ctrl + С и продолжать настройку.




Автозапуск




Чтобы сервис мог автоматически запускаться при старте системы, добавим его в systemd. 




Для начала, создадим пользователя, под которым будет работать сервис:




useradd --no-create-home --shell /bin/false loki




* данной командой мы создадим пользователя loki. Ему нельзя будет входить в систему в качестве интерактивного пользователя, также для него не будет создана домашняя директория.




Делаем владельцем loki бинарник для запуска сервиса:




chown loki:loki /usr/local/bin/loki




Задаем владельца для рабочих каталогов Loki: 




chown -R loki:loki /etc/loki

chown -R loki:loki /opt/loki




Создаем юнит в systemd:




vi /etc/systemd/system/loki.service




[Unit]

Description=Grafana Loki Service

After=network.target



[Service]

User=loki

Group=loki

Type=simple

ExecStart=/usr/local/bin/loki -config.file=/etc/loki/loki-local-config.yaml

ExecReload=/bin/kill -HUP $MAINPID

Restart=on-failure



[Install]

WantedBy=multi-user.target




Перечитываем конфигурацию systemd:




systemctl daemon-reload




Теперь можно разрешить и стартовать наш сервис:




systemctl enable loki --now




Проверить, что он запустился и работает можно командой:




systemctl status loki




Установка серверной части завершена.




Отправка логов на сервер




В нашем примере мы передадим логи веб-сервера NGINX в нашу Grafana Loki. Для этого переходим на сервер с NGINX и выполним следующие действия.




Установка Promtail




Promtail — агент, который читает и отправляет логи на сервер. Его установка во многом напоминает установку сервера — получаем бинарник и добавляем его в автозагрузку. В нашем примере мы загрузим уже скомпилированный файл для запуска.




Для начала, установим следующие пакеты:




yum install unzip wget




unzip нужен для распаковки архива с бинарником; wget — для скачивания архива.




Загружаем последнюю версию promtail для Linux:




wget https://github.com/grafana/loki/releases/latest/download/promtail-linux-amd64.zip




* в нашем примере загружается бинарник на систему 64-бит. На странице https://github.com/grafana/loki/releases можно скачать файлы для установки под Linux и Windows.




Распаковываем скачанный архив:




unzip promtail-linux-amd64.zip




Переносим бинарник в каталог /usr/local/bin:




mv promtail-linux-amd64 /usr/local/bin/promtail




* обратите внимание, что мы его сразу переименовали в promtail.




Создаем каталог для конфигурационных файлов promtail:




mkdir /etc/promtail




Создаем конфигурационный файл:




vi /etc/promtail/promtail.yaml




server:

  http_listen_port: 9080

  grpc_listen_port: 0



positions:

  filename: /tmp/positions.yaml



clients:

  - url: http://192.168.0.15:3100/loki/api/v1/push




* где 9080 — номер порта, на котором будет слушать promtail; 192.168.0.15 — IP-адрес нашего сервера Loki, куда нужно отправлять данные.




Создаем юнит в systemd для promtail:




vi /etc/systemd/system/promtail.service




[Unit]

Description=Promtail Service

After=network.target



[Service]

Type=simple

ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/promtail.yaml

ExecReload=/bin/kill -HUP $MAINPID

Restart=on-failure



[Install]

WantedBy=multi-user.target




Перечитываем конфигурацию systemd:




systemctl daemon-reload




Разрешаем запуск сервиса promtail и стартуем его:




systemctl enable promtail --now




Проверяем статус:




systemctl status promtail




На клиенте в настройки брандмауэра добавляем правило на разрешение порта 9080.




а) если используем iptables (Debian, Ubuntu): 




iptables -I INPUT 1 -p tcp --dport 9080 -j ACCEPT




apt-get install iptables-persistent




netfilter-persistent save




б) если используем firewalld (CentOS, Red Hat):




firewall-cmd --permanent --add-port=9080/tcp




firewall-cmd --reload




После установки promtail открываем браузер и переходим на страницу http://192.168.0.25:9080/targets, где 192.168.0.25 — IP-адрес клиентского компьютера с NGINX. Мы должны увидеть страницу:







Promtail работает. Можно приступать к сбору логов.




Настройка сбора логов




Открываем конфигурационный файл promtail:




vi /etc/promtail/promtail.yaml




… и добавляем:




...



scrape_configs:

- job_name: nginx

  static_configs:

  - targets:

      - localhost

    labels:

      job: nginxlogs

      __path__: /var/log/nginx/*log




* где:







Перезапускаем сервис promtail:




systemctl restart promtail




Снова заходим по адресу http://192.168.0.25:9080/targets — мы должны увидеть настроенное нами задание:







Сбор логов настроен.




Настройка Grafana




Переходим к серверу с Grafana. Он может быть установлен на отдельном сервере или на том же сервере с Loki.




Заходим в веб-интерфейс и переходим в Configuration — Data Sources:







Добавляем новый источник, кликая по Add data source:







Среди списка возможных источников выбираем Loki:







В настройках задаем имя и указываем IP-адрес сервера Loki:







* в нашем примере задается имя Loki и подключение к серверу 192.168.0.15.




Нажимаем на Save & Test:







Если мы увидели сообщение «Data source connected and labels found.»:







… значит подключение выполнено и можно двигаться дальше.




Переходим в раздел Create — Dashboard:







Кликаем по кнопке Add new panel:







В открывшемся окне выбираем в качестве источника данных Loki, затем кликаем по Log labels — выбираем job и nginxlogs:







Мы увидим Unable to graph data (так как логи представляют из себя данные, на основе которых нельзя постоить график) — кликаем по Switch to table view:







Мы должны увидеть строки из логов:







Логи NGINX отображаются в Grafana.




Парсинг лога




Мы увидели логи в графане, но они представленны в неудобном для отбора и фильрации виде. Попробуем это исправить с помощью парсинга логов на стороне promtail.




Открываем файл для редактирования:




vi /etc/promtail/promtail.yaml




Дополним нашу задачу для сбора логов NGINX:




...



scrape_configs:

- job_name: nginx

  static_configs:

  - targets:

      - localhost

    labels:

      job: nginxlogs

      __path__: /var/log/nginx/*log

  pipeline_stages:

    - match:

        selector: '{job="nginxlogs"}'

        stages:

        - regex:

            expression: '^(?P<remote_addr>[w.]+) - (?P<remote_user>[^ ]*) [(?P<time_local>.*)] "(?P<method>[^ ]*) (?P<request>[^ ]*) (?P<protocol>[^ ]*)" (?P<status>[d]+) (?P<body_bytes_sent>[d]+) "(?P<http_referer>[^"]*)" "(?P<http_user_agent>[^"]*)"?'

        - labels:

            remote_addr:

            remote_user:

            time_local:

            method:

            request:

            protocol:

            status:

            body_bytes_sent:

            http_referer:

            http_user_agent:




* обратите внимание, что к имеющейся настройки мы добавили pipeline_stages:







Перезапускаем сервис для promtail:




systemctl restart promtail




Идем в Grafana — в Log labels мы должны увидеть новые критерии для фильтра по тегам:







Пробуем добавить, например, фильтр по статусу ответа веб-сервера:







Источник: https://www.dmosk.ru/instruktions.php?object=grafana-loki



2021-08-15T19:31:52
Software

Биржа bitcoinprofitpro.com, в чем её особенности?



























Rate this post

Криптографические роботы Bitcoin Profit основаны на автоматизме, поэтому очень часто все они похожи друг на друга. Робот Bitcoin Profit, использующий программное обеспечение, может определять рыночные условия и выполнять вычисления, необходимые для выполнения транзакции, которая должна приносить прибыль в режиме реального времени намного быстрее, чем человек. Если вы наблюдаете за работой робота Bitcoin Profit в режиме реального времени и знаете, как работает система, у вас есть возможность заметить, что вы сделали различные инвестиции на рынке всего за несколько секунд. Понимание того, как работает робот, является фундаментальным, поскольку это единственный способ увидеть, что расчеты могут дать преимущество перед обычной торговлей биткойнами. Базовые знания подготовят вас к новому типу торговли криптовалютой.

Преимущества биржи bitcoinprofitpro.com/pl:

  • автоматическая торговля;
  • бесплатная и простая регистрация;
  • доступен демонстрационный режим;
  • без скрытых комиссий;
  • простое в использовании приложение;
  • современное программное обеспечение;
  • легкий депозит, в том числе через блокчейн;
  • рекомендована многими пользователями;
  • минимальный депозит всего 250 долларов;
  • вам не нужен опыт или знания, для менее продвинутых пользователей доступно множество руководств.

Регистрация

Регистрация учетной записи пользователя на криптовалютном рынке Bitcoin Profit не должна занимать более 10-15 минут. Самый простой способ – напрямую войти в Bitcoin Profit. Вы можете сделать это со стартовой страницы. Просто введите свой адрес электронной почты и нажмите кнопку «Начать». Весь процесс защищен протоколом SSL. Преимуществом системы также является хорошо защищенная база данных. Оператор попросит вас предоставить основные данные, такие как: имя и фамилия, номер телефона и адрес электронной почты. Затем вы принимаете общие положения и условия и политику конфиденциальности и выбираете пароль для защиты своей учетной записи. Помните, что на сайте стоит установить надежный пароль, которым вы ни с кем не поделитесь! Стоит попробовать сгенерировать пароль с помощью генераторов, доступных в интернете. Регистрация происходит мгновенно, а форма проста и понятна пользователям. Прежде чем познакомиться с платформой, вы должны подтвердить, что достигли минимального возраста 18 лет, благодаря которому вы можете стать одним из инвесторов.

Первые шаги на платформе

Впечатляюще четкая структура позволяет вам найти все на панели инструментов. Тут вы сможете увидеть свой счет, историю торговли, комиссии. Система также позволяет вам просматривать свою учетную запись, выбирать личные данные, адрес электронной почты или изменять пароль для вашей учетной записи Bitcoin Profit. Для многих инвесторов на рынке криптовалют возможность использовать несколько платформ особенно важна, поэтому система Bitcoin Profit работает как онлайн, так и на мобильных устройствах. Вскоре после создания учетной записи и входа на торговую платформу вам позвонят из службы поддержки клиентов, то есть вашего личного консультанта по инвестициям. Это помогает настроить вашего робота так, чтобы у вас были лучшие шансы на получение прибыли. Вы можете разрешить роботу работать только на одной учетной записи Bitcoin Profit или на нескольких учетных записях.


2021-08-14T05:27:27
Криптовалюта

Полное руководство, как стать веб-разработчиком в 2021 году

Веб-разработка сегодня является одним из самых востребованных отраслевых навыков. Если мы посмотрим на загрузки популярных пакетов, таких как express, react или jquery, то вы увидите, что за последние 5 лет общее между ними состоит в том, что их использование быстро растет с каждым годом.

Фактически, опрос stackoverflow за 2020 год включает «полный стек» и «интерфейс» как две из трех ведущих профессий разработчиков в мире на данный момент.

Таким образом, очевидно, что сегодня веб-разработка — это отличный навык. В этой статье посмотрим, что именно вам нужно сделать, чтобы стать веб-разработчиком в 2021 году и далее на перспективу.

 

Эта проблема

Проблема с сетью сейчас — это информационная перегрузка и шум. jQuery, Angular, Ember, Vue, React, Next.js, Nuxt.js, TypeScript, Sass, Webpack, NPM, Yarn, ESbuild, snowpack, …! Есть так много вещей, так много инструментов, так многому вы можете научиться — что часто становится обескураживающим даже начинать.

Тогда есть смысл того, что актуально сегодня, что будет актуально через 3 года и т. д. Давайте проясним несколько вещей в этом блоге:

 

Вам не нужно все учить

Распространенное заблуждение состоит в том, что вам нужно научиться всему, чтобы стать отличным разработчиком. Это совершенно неверно.

  1. У вас должен быть «полный» технический стек. Полный технический стек — это стек, с помощью которого вы можете создать практически любой проект, который захотите.
  2. Вам нужно знать большинство, если не все популярные инструменты в экосистеме. Обратите внимание, это не означает, что вам нужно знать, как с ними работать. Но вы должны знать, что они существуют.

 

Вам нужно сделать ставку на стек

Angular vs React vs Vue vs Svelte vs xyz. Это обсуждение никогда не закончится. По правде говоря, все популярные фреймворки/библиотеки популярны, потому что люди их используют и хорошо умеют делать то, что делают.

Если хотите, можете попробовать провести время с разными технологиями. Но моя личная рекомендация — не менять основные библиотеки/фреймворки каждые месяц или два.

Конечно, вы можете переключиться с React на Angular, просмотрев Х-часовой курс. Однако помните, что при работе с технологией вам необходимо разработать определенную ментальную модель, и на то, чтобы освоиться с ней, могут потребоваться недели, если не месяцы.

Не переключайтесь на самые передовые технологии на рынке, придерживайтесь технологического стека, с которым вы работаете.

 

Фреймворк для изучения веб-разработки в 2021 году

Хорошо. Теперь большой вопрос. Чему вы на самом деле научились из всего шума в мире? Давайте разделим вопрос на две части — (Что и как), чтобы изучить интерфейс веб-разработки. Оба вопроса одинаково важны, так как в зависимости от принятого решения вы можете сэкономить или потратить впустую много времени. Давайте начнем.

 

Что нужно узнать о веб-разработке?

Это полный список вещей, которые вам следует изучить для веб-разработки. Обратите внимание, что это было бы самоуверенным, потому что у меня большой опыт работы с этими технологиями (платформа, на которой вы это читаете, codedamn, была построена со всеми этими технологиями).

 

Основы Интернета

Для многих это может стать неожиданностью. Большинство сайтов рекомендуют начинать с HTML/CSS, но я чувствую, что даже раньше вы должны понимать, как Интернет и сеть работают на высоком уровне. Что такое HTML-документы, как они отправляются с внутреннего сервера, что такое DNS, что именно происходит, когда вы вводите google.com в браузере и т. д.

Конечно, вам не нужно углубляться в какую-либо из тем, но он дает очень четкое понимание вещей, когда вы внезапно используете dev-серверы для разработки, слегка начинаете переходить на бэкэнд или пытаетесь отлаживать сетевые запросы. позже в вашем путешествии.

 

HTML5/CSS3

HTML и CSS — фундаментальные строительные блоки Интернета. Несомненно, это должно быть первое, чему вы должны научиться что бы быть специалистом во фронтенд-разработке.

Некоторые очень важные моменты:

  1. Обязательно изучите современный синтаксис HTML5.
  2. Попробуйте узнать о семантических тегах в HTML5 вместо того, чтобы вставлять все в div.
  3. Узнайте о современных методах макета в CSS (flexbox, grid)
  4. Узнайте о современном синтаксисе CSS и получите ясное представление о селекторах, медиа-запросах, свойствах, значениях и т. д. — основах.
  5. Не придерживайтесь старого и устаревшего синтаксиса ( centerтег marqueeи т. д.)
  6. Не тратьте много времени на изучение старых методов компоновки в CSS с плавающей точкой и т. д.
  7. Не пробуйте каждую передовую функцию CSS3/4. Многие из них могут еще не поддерживаться в браузерах. По большей части придерживайтесь широко поддерживаемых функций CSS3.

 

JavaScript

JavaScript очень важен для интерактивности и всего, что вы делаете, кроме простой статической целевой страницы HTML/CSS. Его можно широко использовать и за пределами внешнего интерфейса (в Node.js/Deno/TypeScript), поэтому важно, чтобы вы правильно понимали свои основы с помощью JavaScript.

Некоторые очень важные моменты:

  1. Обязательно изучите синтаксис ES6 +. Не используйте их varи даже не следуйте инструкциям. В большинстве случаев они не нужны. Один из способов проверить это — попробовать следовать руководствам, созданным после 2017 года.
  2. У JavaScript есть некоторые особенности поведения, которые могут застать вас врасплох. Например, почему 0,1 + 0,2 не равно 0,3 или почему null == undefined верно в JS. Помните, что у такого поведения всегда есть причины. Чтобы понять такие вещи, нужно выполнить поиск в Google.
  3. JavaScript — это, по сути, язык асинхронного и неблокирующего ввода-вывода. Это означает, что вы должны понимать, как некоторые основные части асинхронных вещей, такие как промисы, работают в JavaScript.
  4. Узнайте о DOM API и поймите, что это API, предоставляемый вашим браузером вашему JS-коду для взаимодействия с вашим HTML/CSS.

 

 

Продолжение:



2021-08-13T21:05:43
Программирование

Полное руководство, как стать веб-разработчиком в 2021 году. Часть 2

Инструменты разработчика

В это время вам также следует начать изучение того, как работать с инструментами разработчика в вашем браузере. Мы предпочитаем инструменты разработчика Chrome, потому что они отлично подходят для отладки и работы с JavaScript и DOM. Независимо от вашего выбора, мы бы предпочли создавать проекты и отлаживать любые проблемы, с которыми вы сталкиваетесь, с помощью инструментов разработчика, вместо того, чтобы часами смотреть на ваш код.

Инструменты разработчика Chrome, как и любой другой инструмент в реальной жизни или виртуальный продукт, потребуют небольшого обучения, и вам придется потратить некоторое время, чтобы работать с ним максимально эффективно. Однако время, которое вы потратите на изучение инструмента разработчика для браузера, окупится на порядки по мере того, как ваша жизнь разработчика будет продолжаться.

Некоторые важные моменты:

  1. Мы рекомендуем придерживаться инструментов разработчика Chrome, потому что они очень мощные.
  2. Узнайте о манипуляциях с DOM, отладке сетевых запросов, установке точек останова для событий, переходе по источникам, поиске кода в ресурсах вашего веб-сайта, регулировании скорости сети и многом другом.
  3. Это будет постоянное обучение, как и все другие технологии. Вы не должны стремиться изучать инструменты разработчика сразу, просто изучите небольшие, но важные вещи и двигайтесь дальше. Вы узнаете намного больше, работая с проектами и т. д.

 

Git

Вам нужно изучить систему управления версиями (VCS), и это должно быть git. Git — это широко используемая VCS, используемая командами и компаниями для управления своими кодовыми базами среди сотрудников. Git может быть очень сложным для изучения, но изначально ваш пример использования git будет заключаться в развертывании вашего кода на GitHub или аналогичном сайте.

Это необходимо, потому что, когда вы изучаете git, вы можете нажать на github. Когда вы можете нажать на github, вы можете интегрироваться со многими сервисами, такими как страницы GitHub, Vercel, Netlify и т. д., Чтобы создать предварительный просмотр вашего веб-сайта/проекта в реальном времени. Этим предварительным просмотром в реальном времени можно поделиться с друзьями, семьей и даже добавить в свое резюме.

Когда вы устроитесь на работу или будете работать с командой из 2+ разработчиков, вам все равно понадобятся знания git. Но даже для индивидуального разработчика это имеет первостепенное значение, так как значительно упрощает цикл развертывания на действующем веб-сайте.

Некоторые важные моменты:

  1. Git может очень быстро стать сложным. Не запутайтесь с большим количеством команд git. Как индивидуальный разработчик, вам вряд ли понадобится что-либо, кроме 5-7 часто используемых команд.
  2. Хотя пункт 1 верен, вы все равно должны понимать общую архитектуру того, как работает git, какие есть ветки, что подразумевается под удаленными репозиториями и т. д. Это снова прочная основа понимания, которую вы должны иметь.

 

NPM/Yarn

NPM и Yarn — два самых популярных менеджера пакетов для JavaScript. Оба они существуют для одной цели — управления зависимостями в вашей кодовой базе. Зависимость — это пакет/программное обеспечение, которое обычно не разрабатывается вами/вашей командой, но вы все равно можете использовать и интегрировать его в свое приложение. Например, система дизайна, такая как бутстрап или попутный CSS, является зависимостью.

Если есть какое-либо обновление зависимости, исправление ошибки или исправление безопасности, сопровождающий пакета обновляет его в репозитории NPM, и вы можете обновить пакет с помощью своего диспетчера пакетов. Наряду с этим, это также помогает с рядом вещей, которые вы узнаете, когда узнаете о NPM и пряжи.

Некоторые важные моменты:

  1. NPM и пряжа — очень близкие понятия. Когда вы узнаете о npm, вы также узнаете о package.json, о том, зачем они нужны, и многом другом. Все это также можно перенести на yarn v1 в качестве менеджера пакетов.
  2. Поэтому не стоит особо задумываться о том, какой менеджер пакетов вам следует изучить. Изучите любой (например, Yarn), и вы можете автоматически переключиться на другой, если этого требует ваш проект.

 

React

React — библиотека, пользующаяся огромной поддержкой сообщества. Любая проблема/ошибка, с которой вы столкнулись с React — скорее всего, кто-то уже сделал эту ошибку и задал вопрос на 1000 веб-сайтах. Поэтому, если вы хороший гуглер, у вас не должно возникнуть проблем при работе с React.

Некоторые важные моменты:

  1. На первый взгляд React выглядит просто, но для масштабной работы требуется разработка ментальной модели. Речь идет не только о концепциях и хуках, но и о том, как спроектировать ваше приложение, сделать его поддерживаемым, выбрать правильные библиотеки для экосистемы и т. д.
  2. React не применяет никаких стандартных практик для общих задач, таких как сетевые запросы или пользовательский интерфейс. Но мы рекомендуем следующие варианты — react-query для сетевых запросов, попутный CSS или материальный UI для библиотеки UI.
  3. Не изучайте подробно компоненты на основе классов, если вам не нужно работать с устаревшей кодовой базой, которая требует от вас глубокого изучения. Компоненты на основе классов — это не будущее React. Убегайте от руководств, которые учат вас компонентам на основе классов. Вместо этого узнайте о функциональных компонентах и ​​хуках.

 

Сборщики модулей

Webpack — один из самых популярных сборщиков модулей, который React использует прямо сейчас из коробки. Опять же, вам не обязательно глубоко изучать webpack, но вы должны знать, что это за файл webpack.config.js.

ESBuild также является еще одним относительно очень быстрым сборщиком модулей на данный момент, но поддержка плагинов для него пока невелика. Как новичку, вам пока не нужно беспокоиться о ESBuild.

 

Тестирование кода

И последнее, но не менее важное: вам также следует сосредоточиться на тестировании кода. Мы считаем, что люди должны начинать с сквозного тестирования, потому что это кажется более простым и интуитивно понятным в качестве причины для тестирования кода по сравнению с тестированием моментальных снимков или модульным тестированием.

Мы рекомендуем использовать Cypress, который имеет очень удобный синтаксис для сквозного тестирования ваших приложений, т.е. ваш код будет действовать как пользователь, использующий ваше приложение, и может в значительной степени выполнять любое действие, которое может выполнить ваш пользователь, но в автоматическом режиме, экономия вашего времени и энергии.

 

Упражняться! Упражняться! Упражняться!

Одна вещь, явно не упомянутая в посте блога выше, — это то, что вам нужно много и постоянно тренироваться. Практика — это способ встраивать концепции в свой мозг. Если вы только смотрите видео, вы не учитесь.

 

Как научиться фронтенд-разработке?

Приведенный выше список не является исчерпывающим списком тем, но определенно является хорошим руководством для начала. Теперь вопрос в том, как научиться веб-разработке через интерфейс?

 

Вам нужен бесплатный подход к обучению

Если вы не можете позволить себе путь обучения за деньги, вы можете вместо этого потратить свое время на бесплатные ресурсы. Независимо от этого, также рекомендуется использовать эти ресурсы с запрограммированной траекторией обучения.

  1. Часто используйте Google для обучения и выяснения сомнений.
  2. Смотрите видео на YouTube, но убедитесь, что они относительно новые, особенно по таким темам, как JavaScript и React.
  3. Практикуйтесь самостоятельно, создавайте проекты и развертывайте их в Интернете, чтобы люди могли их увидеть.
  4. Пройдите бесплатные курсы.

 

Вывод

На самом деле время — деньги, иногда даже более важные, чем деньги. Что вы хотите потратить (или можете потратить), зависит от вас. Но мы бы порекомендовали, даже если это не кодирование, потратить деньги на свое образование, чтобы получить ускорение и ясность в том, чего вы пытаетесь достичь, определенно того стоит.

 

Начало:



2021-08-13T21:00:57
Программирование

Как использовать функции Eval и Exec в Python

В этой статье будет рассмотрено руководство по использованию функций «Eval» и «Exec», доступных в стандартной библиотеке Python. Эти функции можно использовать по-разному для оценки и выполнения выражений Python. Использование обеих этих функций можно лучше понять на примерах. Некоторые примеры приведены ниже. Все примеры кода в этой статье протестированы с Python 3.9.5 в Ubuntu 21.04.

 

Использование Eval для оценки выражений Python

Функция Eval может использоваться для оценки выражений Python и получения из них возвращаемого значения. Любое выражение Python, которое необходимо вычислить, передается функции eval в виде обязательного аргумента. Выражения, переданные в качестве аргумента функциям Eval, имеют полный доступ к встроенным функциям Python, а также к глобальным и локальным пространствам имен. Взгляните на пример кода ниже:

n = 1



result = eval('''n * 2''')



print (result)



eval('''print(n * 2)''')

Тройные кавычки в приведенном выше примере используются для представления строк «как есть», без экранирования специальных символов или внесения каких-либо других изменений. Первый оператор в примере кода определяет переменную с именем «n», имеющую значение 1. Затем вызывается метод eval, передавая ему выражение Python в строковом формате. В строковом выражении имеется ссылка на переменную «n», поскольку она уже доступна в пространстве имен. Следующая инструкция печатает вывод переменной «результат». Последний оператор показывает, что вы можете напрямую вызывать встроенные функции Python в выражении, передаваемом функции eval в качестве аргумента.

После выполнения приведенного выше примера кода вы должны получить следующий результат:

2



2

 

Как видно из выходных данных выше, оба оператора печати дают одинаковый результат.

Вы можете дополнительно предоставить настраиваемые словари для глобальных и локальных пространств имен, чтобы ограничить и контролировать разрешенные объекты пространства имен. Взгляните на пример кода ниже:

n = 1



result = eval('''n * 2''')



print (result)



eval('''print(m * 2)''', {'m': 1})



eval('''print(n * 2)''', {'m': 1})

В операторе eval в четвертой строке предоставляется дополнительный аргумент, в котором используется словарь настраиваемых объектов глобального пространства имен. Когда вы предоставляете словарь настраиваемых глобальных объектов, eval использует только встроенные методы и сопоставления, включенные в словарь. Если вы используете пустой глобальный словарь («{}»), разрешены только встроенные методы и даже не настраиваемый импорт. Поскольку объект «m» в глобальном словаре имеет значение 1, оператор eval может использовать ссылку для «m». В последнем операторе объект «m» доступен в глобальном словаре, но не переменная «n», поскольку был предоставлен настраиваемый словарь глобальных объектов. Последний оператор вызовет ошибку, поскольку в пользовательском глобальном словаре пространства имен нет определения для «n».

После выполнения приведенного выше примера кода вы должны получить следующий результат:

2



2



Traceback (most recent call last):



File "/home/user/Downloads/./test.py", line 7, in <module>



eval('''print(n * 2)''', {'m': 1})



File "<string>", line 1, in <module>



NameError: name 'n' is not defined

Вы можете использовать словарь для объектов локального пространства имен так же, как и для объектов глобального пространства имен. Просто предоставьте пользовательский словарь в качестве третьего аргумента функции eval, чтобы использовать его в качестве сопоставления для объектов локального пространства имен.

 

Использование Exec для запуска кода Python

Функция exec работает аналогично функции eval с некоторыми отличиями. Выражение, передаваемое функции exec, может быть строкой или любым другим допустимым объектом Python, содержащим допустимый код Python. Для сравнения, функция eval принимает только строковые выражения. Вы также можете предоставить настраиваемые словари как для глобальных, так и для локальных объектов пространств имен, и метод exec ведет себя так же, как функция eval, когда используются сопоставления настраиваемых пространств имен. Еще одно отличие от функции eval заключается в том, что функция exec всегда возвращает значение «None». Взгляните на пример кода ниже:

n = 1



result = exec('''n * 2''')



print (result)



exec('''print(n * 2)''')



result = '''print(n * 2)'''



exec(result)

Блок кода очень похож на образец кода, использованный в примере eval, но вместо функции eval теперь используется функция exec. После выполнения приведенного выше примера кода вы должны получить следующий результат:

None



2



2

Как было сказано ранее, функция exec всегда возвращает значение «None», поэтому третья строка выдает «None» в качестве вывода. Затем оператор exec в четвертой строке использует функцию print для вывода «2». Затем переменной результата присваивается новое значение путем предоставления ей действительного оператора кода Python в строковой форме. Последний оператор показывает, что функция exec может напрямую вызывать объекты кода, содержащие допустимый код Python. Также на выходе получается «2».

 

Соображения безопасности

При использовании функций eval и exec вы должны знать, что обе эти функции позволяют выполнять произвольные выражения Python и блоки кода. Если вы сознательно не осведомлены о том, что используется в выражениях, эти операторы могут нанести вред среде, в которой вы работаете. Например, вы можете непреднамеренно модифицировать, удалять или вносить необратимые изменения в файлы, хранящиеся на хосте, используя модули «os» и «sys» и их методы в функциях eval и exec. Модуль «подпроцесс» в Python позволяет запускать новые процессы и выполнять команды оболочки. Выражения в методах eval и exec, использующие модуль подпроцесса, могут привести к непреднамеренному поведению, если вы не будете осторожны с тем, что используется в выражениях.

 

Вывод

Оба метода eval и exec позволяют обрабатывать и выполнять фрагменты кода Python. Вы можете передавать операторы eval другим функциям Python в качестве аргументов, поскольку они всегда возвращают значение, что немного похоже на лямбда-функции в Python. Точно так же вы можете использовать функцию exec для выполнения предопределенного кода Python. Чаще всего он используется, когда код Python нужно читать из одного файла и выполнять в другом.



2021-08-13T19:15:29
Python