[アップデート] CloudWatch Logs からついに ListLogGroups API が登場しました

[アップデート] CloudWatch Logs からついに ListLogGroups API が登場しました

Clock Icon2025.05.19

こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。

いつものように AWS の API 変更をみていると、新しく ListLogGroups API が登場したようです。

Changes This release adds a new API "ListLogGroups" and an improvement in API "DescribeLogGroups"

https://awsapichanges.com/archive/changes/cdc030-logs.html

ListLogGroups

ListLogGroups API は、文字通りロググループの一覧を取得する API です。

今まで、なぜか CloudWatch Logs では ListLogGroups API が提供されておらず、ロググループ一覧を取得したいケースでは DescribeLogGroups API を利用する必要がありました。

DescribeLogGroups の Response Syntax

DescribeLogGroups の Response Syntax は以下のとおりで、Describe 系の API のため、情報量(データ量)が多い結果が返ってきました。そのため、出力結果をもとに並列/並行で処理を捌くような際には、メモリに乗っかるかを意識する必要がありました。

{
   "logGroups": [ 
      { 
          "arn": "string",
          "creationTime": number,
          "dataProtectionStatus": "string",
          "inheritedProperties": [ "string" ],
          "kmsKeyId": "string",
          "logGroupArn": "string",
          "logGroupClass": "string",
          "logGroupName": "string",
          "metricFilterCount": number,
          "retentionInDays": number,
          "storedBytes": number
      }
   ],
   "nextToken": "string"
}

ListLogGroups の Response Syntax

今回新しく登場した ListLogGroups の Response Syntax は以下のとおりです。

データ量もコンパクトで、ロググループ一覧を知りたいことにフォーカスできていますね。

{
   "logGroups": [ 
      { 
         "logGroupArn": "string",
         "logGroupClass": "string",
         "logGroupName": "string"
      }
   ],
   "nextToken": "string"
}

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/API_ListLogGroups.html

paginators は非対応

今回の ListLogGroups は paginators は非対応でした。

>>> import boto3
>>> client = boto3.client('logs')
>>> response = client.can_paginate('list_log_groups')
>>> print(response)
False

ちなみにデフォルトでは 50 件、ロググループが返ってくるようです。

This operation is paginated. By default, your first use of this operation returns 50 results, and includes a token to use in a subsequent operation to return more results.

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/logs/client/list_log_groups.html

そのため、NextToken を利用して、別途自前でページネーション処理を実装する必要があります。

import boto3
from botocore.exceptions import BotoCoreError, ClientError

def list_all_log_groups(region_name=None):
   """
   CloudWatch Logsの全ロググループ名をリストで返す
   """
   try:
      client = boto3.client('logs', region_name=region_name)
      log_groups = []
      params = {}
      while True:
         response = client.describe_log_groups(**params)
         log_groups.extend(response.get('logGroups', []))
         next_token = response.get('NextToken')
         if not next_token:
            break
         params['NextToken'] = next_token
      return [lg['logGroupName'] for lg in log_groups]
   except (BotoCoreError, ClientError) as e:
      print(f"Error: {e}")
      return []

if __name__ == "__main__":
      log_group_names = list_all_log_groups()
      print(f"Total log groups: {len(log_group_names)}")
      for name in log_group_names:
         print(name)

まとめ

以上、非常にコンパクトなブログですが、ListLogGroups API が登場しました。

細かいですが、地味に嬉しいアップデートだと思います。(私も最近この辺りを調べていたため助かりました。)

クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.