Latest Posts

Мониторинг 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 манифест:

Read more

Мониторинг Nginx при помощи stub_status и Prometheus Exporter

Мониторинг Nginx при помощи stub_status и Prometheus Exporter

Не так давно возникла задача мониторинга проекта, который не бежит внутри Kubernetes и простые настройки Prometheus не совсем подходят. Знать нагрузки на сервис интересно, но не хочется много накручивать и писать дополнительный код (к тому же проекты работают весьма успешно на PHP). Посмотрев что может отдать стандартный nginx понял, что в принципе базовую нагрузку вытащить будет довольно легко. Приступаем:

Read more

Golang — использование rate limiter в коде

Golang — использование rate limiter в коде

Rate limiting — ограничение скорости запросов в определенной системе. К примеру вы можете поставить ограничения на ваш веб сервер — не более 10 запросов в секунду. Возможно создание ограничения только для определенного клиента или типа машины.

В Golang добавление rate limit довольно просто, достаточно использовать готовую библиотеку golang.org/x/time/rate

Read more

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 адрес по очереди:

Read more

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))
...

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Read more

Конфигурация и настройка 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. Настройка конфигурации

Read more

Обновление 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 сервер.

Read more

Используем UFW firewall в Ubuntu

Используем UFW firewall в Ubuntu

UFW или uncomplicated firewall —  утилита для конфигурирования межсетевого экрана. Написана командой Canonical и встроена по-умолчанию в Ubuntu. При помощи своей простоты позволяет быстро настроить сервер для противодействия разным атакам. Установлен ufw обычно из коробки.

Чтобы проверить статус работы достаточно написать:

$ > ufw status
$ < Status: inactive

Добавим правила:

Read more

Форматирование даты во 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')
    }
})

И далее в шаблоне отображения можем выводить данные при помощи зарегистрированного фильтра:

Read more

GitHub API &#8212; полезные примеры curl запросов с releases API

GitHub API — полезные примеры curl запросов с releases API

Очередная подборка полезных curl запросов для работы с GitHub API:

  1. Получить объект 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"\"')')"
  2. Получить uploadUrl для загрузки нового asset в данный release объект:
    uploadUrl="$(jq -r '.upload_url' <<< "${release}")"
  3. Удаление 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.

    Read more