Мониторинг Nginx при помощи stub_status и Prometheus Exporter. Часть 2
Мониторинг Nginx при помощи stub_status и Prometheus Exporter. Часть 2
Для получения данных с Nginx status монитора в Prometheus необходим запуск Prometheus exporter в Kubernetes кластере. Напишем deployment манифест для запуска экспортера в Prometheus.
Создадим файл exporter.yaml:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-prometheus-exporter
spec:
replicas: 1
template:
metadata:
labels:
app:nginx-prometheus-exporter
spec:
containers:
- name:nginx-prometheus-exporter
image: "nginx/nginx-prometheus-exporter:0.8.0"
imagePullPolicy: Always
args: ["-nginx.scrape-uri", "https://mywebsite/basic_status"]
ports:
- containerPort: 9113
name: http
---
apiVersion: v1
kind: Service
metadata:
name: nginx-prometheus-exporter
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9113'
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 9113
selector:
app: nginx-prometheus-exporter
type: ClusterIP
Для того, чтобы Prometheus мог забирать данные с pod-ов очень важно добавить соответствующую аннотацию в Service манифест:
Мониторинг Nginx при помощи stub_status и Prometheus Exporter
Мониторинг Nginx при помощи stub_status и Prometheus Exporter
Не так давно возникла задача мониторинга проекта, который не бежит внутри Kubernetes и простые настройки Prometheus не совсем подходят. Знать нагрузки на сервис интересно, но не хочется много накручивать и писать дополнительный код (к тому же проекты работают весьма успешно на PHP). Посмотрев что может отдать стандартный nginx понял, что в принципе базовую нагрузку вытащить будет довольно легко. Приступаем:
Golang — использование rate limiter в коде
Golang — использование rate limiter в коде
Rate limiting — ограничение скорости запросов в определенной системе. К примеру вы можете поставить ограничения на ваш веб сервер — не более 10 запросов в секунду. Возможно создание ограничения только для определенного клиента или типа машины.
В Golang добавление rate limit довольно просто, достаточно использовать готовую библиотеку golang.org/x/time/rate
Golang — функция вывода user IP
Golang — функция вывода user IP
В случае использования вашего приложения через load balancer или через различные прокси вида Cloudflare задача вывода клиентского IP адреса заключается в правильной выборке header. От X-Real-Ip до CF_CONNECTING_IP или же X-Original-Forwarded-For.
Для этого я написал простую функцию по выборке IP адреса:
func readUserIP(r *http.Request) string {
address := r.Header.Get("X-Original-Forwarded-For")
if address == "" {
address = r.Header.Get("X-Forwarded-For")
}
if address == "" {
address = r.Header.Get("X-Real-Ip")
}
if address == "" {
address = r.RemoteAddr
}
return address
}
Алгоритм прост — мы смотрим на входящие HTTP хедеры и вытаскиваем возможный IP адрес по очереди:
Golang — Вывод POST response в fmt.Println
Golang — Вывод POST response в fmt.Println
Сниппет для вывода запроса при отладке:
...
// Save a copy of this request for debugging.
requestDump, err := httputil.DumpRequest(r, true)
if err != nil {
fmt.Println(err)
// handle errors
}
fmt.Println(string(requestDump))
...
Конфигурация и настройка rippled кошелька
Конфигурация и настройка rippled кошелька
Шаг 1. Установка
Требования к установке: минимум 16 GB памяти и от 100 GB свободного места.
Пример установки на Ubuntu 20.04:
sudo apt -y update && \ sudo apt -y install apt-transport-https ca-certificates wget gnupg && \ wget -q -O - "https://repos.ripple.com/repos/api/gpg/key/public" | \ sudo apt-key add - && \ echo "deb https://repos.ripple.com/repos/rippled-deb bionic stable" | \ sudo tee -a /etc/apt/sources.list.d/ripple.list && \ sudo apt -y update && \ sudo apt -y install rippled && \ systemctl status rippled.service
Шаг 2. Настройка конфигурации
Обновление Bitcoind сервера до 0.19
Обновление Bitcoind сервера до 0.19
Ниже приведены быстрые инструкции по обновлению bitcoind сервера:
$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.1/bitcoin-0.19.1-x86_64-linux-gnu.tar.gz $ tar -zxvf bitcoin-0.19.1-x86_64-linux-gnu.tar.gz $ mv ~/bitcoin-0.19.1/bin/bitcoind /usr/bin/bitcoind $ mv ~/bitcoin-0.19.1/bin/bitcoin-cli /usr/bin/bitcoin-cli
Останавливаем сервер:
bitcoin-cli stop
Далее проверяем bitcoin.conf в ~/.bitcoin папке:
rpcuser=user rpcbind=127.0.0.1 rpcpassword=pass rpcport=8332 rpcallowip=127.0.0.1 server=1 shrinkdebuglog=1 prune=5500 keypool=100 addresstype=bech32
По сравнению с прошлыми версиями в конфигурационный файл был добавлен параметр rpcbind — устанавливает на какой адрес «повесить» bitcoind сервер.
Используем UFW firewall в Ubuntu
Используем UFW firewall в Ubuntu
UFW или uncomplicated firewall — утилита для конфигурирования межсетевого экрана. Написана командой Canonical и встроена по-умолчанию в Ubuntu. При помощи своей простоты позволяет быстро настроить сервер для противодействия разным атакам. Установлен ufw обычно из коробки.
Чтобы проверить статус работы достаточно написать:
$ > ufw status $ < Status: inactive
Добавим правила:
Форматирование даты во VueJS с MomentJS
Форматирование даты во VueJS с MomentJS
Волей судьбы начал работать плотно с фронтендом для проектов. Выбор пал на лёгкий в освоении VueJS.
В качестве одной из задач стоял вывод даты в определенном удобным человеку формате (вместо 2020-05-10T21:43:32.545448Z). Для этого используем Moment JS:
import moment from 'moment'
... ... ... ...
Vue.filter('formatDate', function (value) {
if (value) {
return moment(String(value)).format('MM/DD/YYYY hh:mm')
}
})
И далее в шаблоне отображения можем выводить данные при помощи зарегистрированного фильтра:
GitHub API — полезные примеры curl запросов с releases API
GitHub API — полезные примеры curl запросов с releases API
Очередная подборка полезных curl запросов для работы с GitHub API:
- Получить объект release с выбранным tag_name:
release="$(curl -s -X GET -H "Authorization:token ${GITHUB_TOKEN}" "https://api.github.com/repos/${GITHUB_REPO}/releases" | jq -r '.[] | select(.tag_name=='\""$TAG_NAME"\"')')" - Получить uploadUrl для загрузки нового asset в данный release объект:
uploadUrl="$(jq -r '.upload_url' <<< "${release}")" - Удаление asset из release:
existingAsset="$(curl -s -X GET -H "Authorization:token ${GITHUB_TOKEN}" "https://api.github.com/repos/${GITHUB_REPO}/releases/${releaseID}/assets" | jq -r '.[] | select(.name=='\""$ARTIFACT"\"')')" existingAssetID="$(jq -r '.id' <<< "${existingAsset}")" resp="$(curl -s -X DELETE -H "Authorization:token ${GITHUB_TOKEN}" -H "Content-Type:application/octet-stream" "https://api.github.com/repos/${GITHUB_REPO}/releases/assets/${existingAssetID}")" echo "$resp"Для работы bash снипетов необходимо установить расширение jq, добавить GITHUB_TOKEN и GITHUB_REPO.