Latest Posts

Prometheus — установка для небольшого Kubernetes кластера

Prometheus — установка для небольшого Kubernetes кластера

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

Для начала подготовим Prometheus.yml файл:

global:
  scrape_interval:     60s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 60s # Evaluate rules every 15 seconds. The default is every 1 minute.

# 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"
scrape_configs:
  - job_name: 'my-service-scrapper'
    scheme: https
    static_configs:
      - targets: ['service.visla.dev:443']

В качестве target можно указывать как и URI сторонних сервисов так и внутренний fqdn kubernetes service name чтобы не ходить наружу.

Read more

Отправка Telegram сообщений с Go

Отправка Telegram сообщений с Go

При помощи библиотеки go-telegram-bot-api достаточно легко написать свою программу на Go для отправки сообщений в Telegram. Библиотека имеет множество реализованных методов для работы c Telegram API — отправка сообщений, загрузка изображений и медиафайлов, ответ на сообщения в группах и отслеживание новых событий в каналах.

Реализуем простую программу для отправки сообщений самому себе.

Read more

Автообновление Go проектов при помощи github-selfupdate

Автообновление Go проектов при помощи github-selfupdate

go-github-selfupdate это довольно хорошая реализация поиска и обновлений новых версий приложения если вы используете GitHub в качестве хостинга релизов. Библиотека поддерживает поиск новых semver релизов через GiHub releases.

Подключить поиск и загрузку новых обновлений достаточно просто:

  1. Ваш проект должен находиться на GitHub плюс очень важно чтобы новые релизы публиковались только через страницу GitHub releases (пример).
  2. Далее в проект добавляем переменную с номером версии.
  3. Теперь вызываем selfupdate библиотеку: сначала проверяем выход новых релизов (понадобится GitHub токен если проект приватный) и ,если имеются новые версии, делаем загрузку и замену исходного приложения.
  4. После перезагрузки вы будете использовать последнюю версию приложения.

Пример приложения:

Read more

Очистка Slack — сообщения, файлы — Slack Cleaner

Очистка Slack — сообщения, файлы — Slack Cleaner

Slack Cleaner — хорошая утилита для удаления сообщений, чатов, файлов из Slack команды. Также при помощи данной утилиты можно удалить все сообщения определенного пользователя.

Для запуска и удаления файлов достаточно создать новый Slack токен (вы должны быть администратором команды чтобы выполнять некоторые операции).

И далее запускаем следующую команду:

Read more

Kuberentes. Основные компоненты

Kuberentes. Основные компоненты

Kubernetes — ПО  для автоматизации развёртывания, масштабирования контейнеризированных приложений и управления ими. Поддерживает основные технологии контейнеризации, включая Docker, rkt, также возможна поддержка технологий аппаратной виртуализации. Рассмотрим основные компоненты Kubernetes:

  1. API Server — Открывает наружу Kubernetes API. Фронтенд часть Kubernetes контроллера. Называют kube-apisever.
  2. etcd — Распределенное key-value хранилище для сохранения состояния кластера.
  3. Scheduler — Планировщик Kubernetes, определяет на каких нодах нужно поднимать поды очередного сервиса или при изменении нагрузки (или проблемах с нодой) перераспределять поды.
  4. Kube-controller-manager  Контроллер, который отвечает за работоспособность фоновых задач кластера.
  5. Cloud-controller-manager Контроллер, отвечающий за взаимодействие с Cloud провайдерами.
  6. kubelet — Отвечает за все, что бежит на ноде. Общается с мастер нодой через API Server.

    Read more

Сканирование портов с nmap

Сканирование портов с nmap

nmap — полезная утилита для сканирования открытых наружу на целевом хосте портов. Утилита имеет множество настроек (ограничить диапазон портов, узнать тип ОС)

Устанавливается при помощи brew:

$ brew install nmap

И далее достаточно задать имя хоста для проведения проверки:

$ nmap ip-host
Starting Nmap 7.80 ( https://nmap.org ) at 2020-01-19 15:35 CET
Nmap scan report for ip-host
Host is up (0.045s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
443/tcp  open  https
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.88 seconds

Как мы видим к примеру сервисы SSH, MySQL торчат наружу на стандартных номерах портов. Для безопасности рекомендуется менять номера портов если их нужно открывать наружу и использовать файрволл который будет блокировать соединения с неподходящих источников.

Read more

Golang — поднятие тест сервера при unit тестах

Golang — поднятие тест сервера при unit тестах

func TestHTTP(t *testing.T) {
  go func() {
    serverMux := http.NewServeMux()
    serverMux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
      fmt.Fprintln(w, "Pong!")
    })
    err := http.ListenAndServe(":8082", serverMux)
    if err != nil {
      panic("ListenAndServe: " + err.Error())
    }
  }()

   URL = "http://localhost:8082"
   assert.NoError(t, myTestServerFunc())
}

... ... ...

func myTestServerFunc() err {
 // here your business logic which calls remote hosts
 return nil
}

При помощи данного сниппета мы можем зарегистрировать нужные нам http роуты для теста и запустить в отдельной go-рутине минимальный веб сервер.
Данная техника полезна при тестировании различных HTTP запросов без вовлечения внешних ресурсов. Тем самым мы можем проверить наш код на обработку ошибок, таймаутов или различных body response.

Read more

Скрипт автоматизации платежей на карты Visa, MasterCard, Мир

Скрипт автоматизации платежей на карты Visa, MasterCard, Мир

В наличии скрипт для проведения автоматических платежей при помощи партнерского провайдера на кредитные карты Visa, MasterCard, Мир.

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

Платеж будет проведен посредством провайдера-партнера с установленными тарифами моментально.

Скрипт можно развернуть как веб сервис с REST API. По примерам и вопросам внедрения обращайтесь через контакты.

Read more

Скрипт автоматизации платежей Qiwi

Скрипт автоматизации платежей Qiwi

В наличии скрипт для проведения автоматических платежей при помощи партнерского провайдера для платежной системы Qiwi.

В общем случае будет достаточно инициализировать клиент и вызвать один метод для проведения платежа:

$qiwiClientId = '';
$qiwiClientSecret = '';
$qiwiPin = '';

$client = new AdvGroupClient($qiwiClientId, $qiwiClientSecret, new HttpClient());
$resultTxId = $this->client->sendToExternalQiwiWallet($qiwiPin, $wallet, $amount);

Платеж будет проведен посредством провайдера-партнера с установленными тарифами моментально на кошелек Qiwi.

Read more

Загрузка файла в S3 с Go и minio-go client

Загрузка файла в S3 с Go и minio-go client

Для одного из проектов потребовалось сделать сервис по хранению файлов в одном из провайдеров, поддерживающих S3 API. В качестве клиента была использована библиотека minio-go. Minio — это OpenSource аналог S3, а minio-go — удобный клиент для работы с ним.

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

Read more