INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

Миграция DNS из bind (named) в Selectel

№ 11982 В разделе Sysadmin от April 23rd, 2023,
В подшивках:

Допустим, вы хотите переехать с вашего собственного DNS сервера на хостинг Селектел и этот ваш сервер называется bind (он же named). Некоторые другие сервисы типа dns.he.net также предлагают экспорт всей зоны в виде bind файла. Это чертовски удобно при миграциях! Однако, предлагаемые Селектелом средства на python не сработали и пришлось писать собственную утилиту на go.

Для работы требуется в первую очередь получить токен в панели управления и, собственно, сам bind файл. Ну и, конечно же, скачать бинарник из раздела релизов в репозитории с кодом https://git.blindage.org/21h/selectel-dns-bind-zone-upload. Некоторые типы записей нежелательно импортировать, например NS или SOA, если зона уже была создана самостоятельно руками, поэтому они по умолчанию отключены, но их всегда можно включить через дополнительные аргументы.

TOKEN=selectel_token_2342 ./selectel-dns-bind-zone-upload \
      -domain blindage.org -zonefile blindage.org.txt -includeNS

Поддерживаемые типы записей:

  • A
  • AAAA
  • CNAME
  • TXT
  • NS
  • MX
  • SRV
  • SOA
  • SSHFP

Записи PTR и другие, не входящие в список, игнорируются.

https://git.blindage.org/21h/selectel-dns-bind-zone-upload

Нет комментариев »

Kubernetes: разделение post и get запросов из одного пути на разные сервисы

№ 11971 В разделе Sysadmin от April 11th, 2023,
В подшивках:

Логика очень простая, есть некоторый url api, который обрабатывает запросы для базы данных. Запросы на запись происходят долго, логика муторная и т.д. А вот запросы на чтение можно делать из другой базы данных после обработки полученных ранее данных. Вы приходите к выводу сделать 2 разных независимых сервиса, первый на запись, второй на чтение. Добиться штатными способами в кубере можно создав ingress ресурс, который имеет у себя 2 пути к 2 разным сервисам, помеченных как _post и _get, а также rewrite и условия по названию методов в сниппетах, записанных в аннотации. После того как придет запрос он согласно условию по имени метода будет перезаписан и передан на соответствующий путь, закрепленный за сервисом. Все легко и просто.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/configuration-snippet: |
      internal;
      rewrite ^ $original_uri break;
    nginx.ingress.kubernetes.io/server-snippet: |
      location /api/file {
        if ( $request_method = GET) {
          set $target_destination '/api/file/_get';
        }
        if ( $request_method = POST) {
          set $target_destination '/api/file/_post';
        }
        set $original_uri $uri;
        rewrite ^ $target_destination last;
      }
  name: simple-two-route
  namespace: test
spec:
  ingressClassName: nginx
  rules:
  - host: blindage.org
    http:
      paths:
      - backend:
          service:
            name: service-post
            port:
              number: 80
        path: /api/file/_post
        pathType: Exact
      - backend:
          service:
            name: service-get
            port:
              number: 80
        path: /api/file/_get
        pathType: Exact

Нет комментариев »

Filebeat to Opensearch

№ 11882 В разделе Sysadmin от March 7th, 2023,
В подшивках:

Opensearch это форк Elasticsearch, они как бы одно и тоже, но формально не совместимы поэтому напрямую из Filebeat и других подобных переслать данные не получится. Чтобы оно заработало нужна специальная версия Logstash, которая имеет плагин для работы с opensearch.

Настройки Filebeat

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

version: '3.3'
services:
  filebeat:
    image: elastic/filebeat:7.16.2
    command: ["-e", "--strict.perms=false"]
    environment:
      LOGSTASH_HOST: 10.2.113.39
      LOGSTASH_PORT: "5044"
    user: root
    restart: always
    volumes:
      - /srv/db/mysql-logs:/var/log/mysql:ro
      - /srv/db/filebeat.yml:/usr/share/filebeat/filebeat.yml
      - /srv/db/filebeat-modules.d:/usr/share/filebeat/modules.d

Внутри конфига filebeat.yml указываем output.logstash

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml

output.logstash:
  hosts: ['${LOGSTASH_HOST}:${LOGSTASH_PORT}']
  index: "service-db-test-%{+yyyy.MM.dd}"
setup:
  template:
    name: "service-db-test"
    pattern: "service-db-test"

Настройки Logstash

Вот тут уже начинается магия. Мы видим, что это вообще не самый простой logstash.

version: "3"
services:
  logstash:
    image: opensearchproject/logstash-oss-with-opensearch-output-plugin:7.16.2
    volumes:
      - "./config:/usr/share/logstash/config:ro"
    ports:
      - "5044:5044/tcp"
      - "5044:5044/udp"
    restart: always

Конфиг пайплайна как раз и является ключевым во всей цепочке сбора логов. Обращаем внимание на то, что в output уже opensearch, а не эластик.

input {
  beats {
    host => "0.0.0.0"
    port => "5044"
  }
}

output {
  if [service][type] == "mysql" {
    opensearch
    {
	hosts => ["https://10.3.27.105:9200"]
	index => "service-db-test-filebeat-%{+yyyy.MM.dd}"
	user => "mylogin"
	password => "mypassword"
	ssl => "true"
	ssl_certificate_verification => "false"
    }
    #stdout {}
  } else {
    opensearch
    {
	hosts => ["https://10.3.27.105:9200"]
	index => "stand-test-filebeat-%{+yyyy.MM.dd}"
	user => "mylogin"
	password => "mypassword"
	ssl => "true"
	ssl_certificate_verification => "false"
    }
    #stdout{}
  }
}

Подключаем этот пайплайн в logstash.yml: path.config: "./config/pipeline.conf"

Kibana

Создаем нужные настройки для индексов в кибане и читаем логи.

Готово. Можно идти пить чай.

Нет комментариев »

Konsole: ctrl+s при поиске в mc вызывает ненависть

№ 11868 В разделе Sysadmin от December 11th, 2022,
В подшивках:

Хотим в mc что-нибудь быстренько найти, жмем ctrl+s, а mc просто замирает с таким сообщением.

Идем в настройки профиля -> Advanced и отключаем flow control. Зачем это фуфло держать включенным одним создателям KDE известно.

Нет комментариев »

SSH debug3: set_sock_tos: set socket 3 IP_TOS 0x48

№ 11834 В разделе Sysadmin от October 1st, 2022,
В подшивках: ,

Если вдруг внезапно случилась такая ошибка, то проверьте на сервере fail2ban 😉

Нет комментариев »

Облачная платформа
Яндекс.Метрика

Fortune cookie: Today's spam: Give me some Love