№ 11982 В разделе
Sysadmin
от April 23rd, 2023,
В подшивках: Selectel
Допустим, вы хотите переехать с вашего собственного 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
Поддерживаемые типы записей:
Записи PTR и другие, не входящие в список, игнорируются.
№ 11971 В разделе
Sysadmin
от April 11th, 2023,
В подшивках: Kubernetes
Логика очень простая, есть некоторый 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
№ 11882 В разделе
Sysadmin
от March 7th, 2023,
В подшивках: ELK
Opensearch это форк Elasticsearch, они как бы одно и тоже, но формально не совместимы поэтому напрямую из Filebeat и других подобных переслать данные не получится. Чтобы оно заработало нужна специальная версия Logstash, которая имеет плагин для работы с opensearch.
Ну все как обычно, поднимается где-нибудь рядом с сервисом, который необходимо отслеживать. Если у вас 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.
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"
Создаем нужные настройки для индексов в кибане и читаем логи.
Готово. Можно идти пить чай.
№ 11868 В разделе
Sysadmin
от December 11th, 2022,
В подшивках: Linux
Хотим в mc что-нибудь быстренько найти, жмем ctrl+s, а mc просто замирает с таким сообщением.
Идем в настройки профиля -> Advanced и отключаем flow control. Зачем это фуфло держать включенным одним создателям KDE известно.
№ 11834 В разделе
Sysadmin
от October 1st, 2022,
В подшивках: Linux, Security
Если вдруг внезапно случилась такая ошибка, то проверьте на сервере fail2ban 😉
Fortune cookie: Today's spam: Give me some Love