Добавить измерение instanceid к метрике c Cloudwatch -фильтр - PullRequest
2 голосов
/ 10 марта 2020

Я установил очень простой c метри c фильтр для потока журнала, чтобы подсчитать количество строк, соответствующих определенному условию. Мой пример использования очень похож на описанный в учебном пособии для подсчета apache кодов HTTP-статуса .

Например, события журнала выглядят как

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 404 2326

и фильтр очень похож на

[IP, UserInfo, User, Timestamp, RequestInfo, StatusCode=404, Bytes]

Я настроил metri c -фильтр через консоль Cloudwatch. Фильтр работает отлично, за исключением того, что он накапливает значения для всех экземпляров. Однако metri c ценен только для меня, если он принимает во внимание instanceid.

Есть ли способ получить metri c для instanceid, например, записать instanceid как измерение в metri c?

Я искал некоторое время, но не мог найти ничего подходящего. Для меня очень важно, что мне не нужно жестко кодировать instanceid, так как экземпляры могут быть прерваны в любой момент, и будут созданы новые экземпляры. Далее я хочу избежать оценки метри c на машине EC2 .

Есть ли какой-нибудь способ достичь моей цели? Буду очень признателен за любые предложения!

1 Ответ

1 голос
/ 13 марта 2020

Я не понимаю, как метри c фильтры могут помочь вам здесь. Во-первых, они не поддерживают измерения, вы можете установить только имя и пространство имен metri c. Во-вторых, у вас нет идентификатора экземпляра в строке журнала, и фильтры метри c работают для каждой строки журнала.

Вы можете использовать фильтры метри c, если у вас было ровно 1 экземпляр за раз. Затем вы можете настроить ловушку автоматического масштабирования для создания новых фильтров metri c при запуске нового экземпляра и поместить идентификатор экземпляра в имя metri c, а также использовать другую ловушку автоматического масштабирования для удаления фильтра metri c когда экземпляр заканчивается. Если у вас есть более одного экземпляра, этот подход приведет к двойному подсчету значений.

Вы также говорите, что хотите избежать публикации пользовательских метрик из самого приложения (это мой предпочтительный подход).

Это оставляет нас с подписными фильтрами .

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

Затем вам потребуется написать лямбда-функцию, которая берет идентификатор экземпляра из журнала steam, анализирует событие журнала и отправляет эту информацию обратно в журналы CloudWatch, используя EMF . Но вы можете просто сделать это прямо из приложения, используя CloudWatch Agent и EMF, поэтому я бы предпочел такой подход.

...