.png)
Я хотел бы использовать graphite для сбора метрик с разных серверов. По умолчанию carbon слушает 2003 на всех интерфейсах, что меня вполне устраивает.
Теперь теоретически любой может отправить туда метрические данные. Есть ли стандартный способ предотвратить это (похожий на http base auth) или мне нужно возиться с ограничениями на основе IP на физическом интерфейсе?
решение1
Это зависит от того, насколько вы хотите «укрепить» какие-либо узлы Graphite («Graphite» — это любая смешанная топология углеродных реле, углеродных кэшей, внутреннего хранилища и, возможно, graphite-web/api).
Если вы знаете, какие хосты в вашей сетидолженотправляете метрики в Graphite (обычно ретрансляторы), вы можете изменить правила брандмауэра хоста Graphite, чтобы ожидать либо явного списка IP-адресов хоста, либо диапазона для применимых портов. Или вы можете сделать что-то подобное на периферии сети с брандмауэра или маршрутизатора — у меня нет советов по этому поводу, поскольку ваш вопрос не дает более полного представления о том, как выглядит ваша топология.
Альтернативным подходом было бы использование поддержки AMQP, чтобы вместо этого ваши узлы публиковали свои метрики брокеру как аутентифицированный пользователь, а затем ваш хост(ы) Graphite изменили брандмауэр хоста, чтобы принимать только TCP 2003 от брокера, от которого поступают метрики. Преимущество здесь в ваших узлах Graphiteтольконужно знать, какие метрики брокера будут поступать на него, что радикально упрощает любые правила брандмауэра хоста. Наличие узлов, публикующих метрики через облегченную службу, немного лучше защищает вещи, поскольку проблема «доверия», которая у вас есть, решается в верхней части потока, а не в конечном итоге поступления метрик — легитимных или нет — на ваш хост(ы) Graphite. RabbitMQ — это OSS, и его довольно просто запустить и запустить, не нужно слишком много возиться с конфигурацией, если вы используете подключаемый модуль управления. Большая часть его конфигурации открывает необходимые порты для работы.
Однако это делает простую топологию публикации метрик в Graphite немного более сложной для задачи и прочно устанавливает модель pub/sub для того, как ваши метрики попадают в Graphite (но имеет приятное побочное преимущество, позволяя метрикам в пути потенциально не теряться). Это также добавляет еще один хост для обеспечения безопасности в операционных целях.
Чтобы пойти дальше, вы могли бы реализовать систему мониторинга журналов для наблюдения за файлом listener.log carbon-relay, поскольку он будет записывать строку для каждой полученной и обработанной метрики. На высоком уровне вы бы наблюдали за этим журналом в поисках исключений для ожидаемых вами метрик. Например, если у вас есть метрика server.cpu.load, вы бы ожидали увидеть, что они обрабатываются, но опубликованная метрика с именем foo.bar.value недействительна. В качестве ответа на такое событие вы могли бы просто стереть соответствующий каталог, который Whisper создает для недействительного пространства имен (если вы используете Whisper для хранения).
Углеродное реле и углеродный кэш Hardening Graphite — это хорошо и разумно, но не забывайте, что это так же опасноВОЗможете получить доступ к своему веб-приложению Graphite или API-интерфейсу Graphite, чтобы получить эти показатели.