Настройка логирования
В Object Storage можно управлять логированием через веб-консоль, утилиты командной строки и SDK.
Получить текущий статус логирования
Заголовок раздела «Получить текущий статус логирования»- Веб-консоль
- AWS CLI
- Python
- Go
В веб-консоли выберите нужный проект.
В списке сервисов выберите Object Storage.
Нажмите на имя нужного бакета и перейдите на вкладку Логирование.
Если логирование активно, на этой вкладке отображается статус Включено.
1aws s3api get-bucket-logging --bucket <имя бакета>Приведенный код на Python:
- Импортирует
boto3— официальный AWS SDK для Python. - Создает сессию и клиент для подключения к Object Storage.
- Вызывает метод
s3.get_bucket_loggingи запрашивает информацию о статусе логирования для указанного бакета. - Если логирование включено, выводит имя целевого бакета и префикс для логов.
- Если логирование не включено, выводит соответствующее сообщение.
1import boto32import json3
4# Создает сессию и клиент для подключения к Objeсt Storage5session = boto3.session.Session(profile_name='default')6s3 = session.client(7 service_name='s3',8 endpoint_url='https://storage.mwsapis.ru/'9)10
11# Запрашивает информацию о логировании для указанного бакета12response = s3.get_bucket_logging(13 Bucket='bucket'14)15
16
17# Извлекает информацию о логировании18logging_info = response.get('LoggingEnabled', {})19
20# Проверяет, включено ли логирование21if logging_info:22 print("\nLoggging enabled:")23 print(f"Target bucket: {logging_info.get('TargetBucket')}") #выводит имя целевого бакета, в который сохраняются логи24 print(f"Prefix used for logs: {logging_info.get('TargetPrefix')}") #выводит префикс для логов25 #Если логирование не включено, выводит соответствующее сообщение26else:27 print("\nLogging is not enabled for the bucket.")Приведенный код на Go:
- Импортирует необходимые пакеты, в том числе AWS SDK для Go.
- Получает из аргумента командной строки имя бакета, для которого нужно проверить статус логирования.
- Подгружает конфигурацию из
~/.aws/*. - Cоздает клиент для подключения к Object Storage.
- Получает информацию о статусе логирования.
- Выводит полученную информацию. Если логиование включено, выводит имя целевого бакета и префикс для логов.
1package main2
3import (4 "context"5 "flag"6 "fmt"7 "log"8
9 "github.com/aws/aws-sdk-go-v2/aws"10 "github.com/aws/aws-sdk-go-v2/config"11 "github.com/aws/aws-sdk-go-v2/service/s3"12)13
14func main() {15 // Получает имя бакета из аргумента командной строки16 bucketName := flag.String("b", "", "The name of the bucket")17 flag.Parse()18
19 if *bucketName == "" {20 fmt.Println("You must supply the name of a bucket (-b BUCKET)")21 return22 }23
24 // Подгружает конфигурацию из ~/.aws/*25 cfg, err := config.LoadDefaultConfig(context.TODO())26 if err != nil {27 log.Fatal(err)28 }29
30 // Создает клиент для подключения Object Storage31 client := s3.NewFromConfig(cfg)32result, err := client.GetBucketLogging(context.TODO(), &s3.GetBucketLoggingInput{33 Bucket: aws.String(*bucketName),34})35if err != nil {36 log.Fatal(err)37}38// Проверяет, включено ли логирование и выводим информацию39 if result.LoggingEnabled != nil {40 fmt.Printf("Logging is enabled for bucket %s\n", *bucketName)41 fmt.Printf("Target Bucket: %s\n", *result.LoggingEnabled.TargetBucket)42 fmt.Printf("Target Prefix: %s\n", *result.LoggingEnabled.TargetPrefix)43 } else {44 fmt.Printf("Logging is not enabled for bucket %s\n", *bucketName)45 }46}Включить логирование
Заголовок раздела «Включить логирование»В бакете, который будет использоваться для хранения логов, должна быть выключена блокировка объектов.
- Веб-консоль
- AWS CLI
- Python
- Go
В веб-консоли выберите нужный проект.
В списке сервисов выберите Object Storage.
Нажмите на имя нужного бакета и перейдите на вкладку Логирование.
Включите опцию Логирование.
Настройте логирование:
Выберите целевой бакет.
Укажите префикс для логов.
Выберите формат лога.
Нажмите кнопку Cохранить.
Чтобы включить логирование для бакета:
Создайте целевой бакет, в котором будут сохраняться логи.
Создайте файл с настройками логирования в формате JSON:
json 1{2"LoggingEnabled": {3"TargetBucket": "<имя целевого бакета>",4"TargetPrefix": "<префикс для логов>"5}6}Выполните команду:
bash 1aws s3api put-bucket-logging --bucket <имя бакета> --bucket-logging-status file://<путь к файлу с настройками>
Приведенный код на Python:
- Импортирует
boto3— официальный AWS SDK для Python. - Определяет функцию
enable_bucket_logging, которая принимает в качевстве аргументов имя исходного бакета, имя целевого бакета и префикс для логов в целевом бакете. - Включает логирование.
- Выводит сообщение об успешном включении логирования.
1import boto32from botocore.exceptions import ClientError3
4def enable_bucket_logging(source_bucket_name, target_bucket_name, target_prefix):5 """6 Включает логирование для указанного бакета S3.7
8 :param source_bucket_name: Имя бакета, для которого включается логирование.9 :param target_bucket_name: Имя целевого бакета, куда будут записываться логи.10 :param target_prefix: Префикс для логов в целевом бакете.11 """12 # Создает клиент S313 s3 = boto3.client('s3')14
15 try:16 # Настраивает логирование17 response = s3.put_bucket_logging(18 Bucket=source_bucket,19 BucketLoggingStatus={20 'LoggingEnabled': {21 'TargetBucket': target_bucket,22 'TargetPrefix': log_prefix23 }24 }25 )26 print(f"Logging enabled for bucket '{source_bucket_name}'. Logs will be stored in '{target_bucket_name}/{target_prefix}'.")27 except ClientError as e:28 print(f"Error enabling logging for bucket '{source_bucket_name}': {e}")29
30# Пример использования31source_bucket = "new" # Бакет, для которого включается логирование32target_bucket = "newbucket" # Бакет, куда будут записываться логи33log_prefix = "logs/" # Префикс для логов34
35enable_bucket_logging(source_bucket, target_bucket, log_prefix)Приведенный код на Go:
- Импортирует необходимые пакеты, в том числе AWS SDK для Go.
- Определяет:
- имя бакета, для которого будут собираться логи;
- имя бакета, в котором логи будут храниться;
- префикс для логов.
- Подгружает конфигурацию из
~/aws/*. - Создает клиент для доступа к Object Storage.
- Устанавливает настройки логирования.
- Выводит сообщение об успешном применении настроек.
1package main2
3import (4 "context"5 "fmt"6 "log"7
8 "github.com/aws/aws-sdk-go-v2/aws"9 "github.com/aws/aws-sdk-go-v2/config"10 "github.com/aws/aws-sdk-go-v2/service/s3"11 "github.com/aws/aws-sdk-go-v2/service/s3/types"12)13
14func main() {15 var (16 bucketName = "bucket1"17 targetBucket = "bucket2" // Бакет, куда будут сохраняться логи18 targetPrefix = "logs/"19 )20
21 // Подгружает конфигурацию из ~/.aws/*22 cfg, err := config.LoadDefaultConfig(context.TODO())23 if err != nil {24 log.Fatal(err)25 }26
27 // Создает клиент для доступа к Object Storage28 client := s3.NewFromConfig(cfg)29
30 // Устанавливает настройки логирования31 _, err = client.PutBucketLogging(context.TODO(), &s3.PutBucketLoggingInput{32 Bucket: aws.String(bucketName),33 BucketLoggingStatus: &types.BucketLoggingStatus{34 LoggingEnabled: &types.LoggingEnabled{35 TargetBucket: aws.String(targetBucket),36 TargetPrefix: aws.String(targetPrefix),37 },38 },39 })40 if err != nil {41 log.Fatalf("Failed to enable logging, %v", err)42 }43
44 fmt.Println("Logging enabled successfully")45}Отключить логирование
Заголовок раздела «Отключить логирование»- Веб-консоль
- AWS CLI
- Python
- Go
- В веб-консоли выберите нужный проект.
- В списке сервисов выберите Object Storage.
- Нажмите на имя нужного бакета и перейдите на вкладку Логирование.
- Выключите опцию Логирование.
1aws s3api put-bucket-logging --bucket <имя бакета> --bucket-logging-status {}Приведенный код на Python:
- Импортирует
boto3— официальный AWS SDK для Python. - Создает клиент для подключения с Object Storage.
- Определяет имя бакета, для которого нужно отключить логирование.
- Вызывает метод
s3.put_bucket_loggingи передает пустую конфигурацию логирования. - Выводит сообщение об успешном отключении логирования.
1import boto32from botocore.exceptions import ClientError3
4def disable_bucket_logging(source_bucket_name):5
6 # Создает клиент для подключения к Object Storage7 s3 = boto3.client('s3')8
9 try:10 # Передает пустой словарь BucketLoggingStatus11 response = s3.put_bucket_logging(12 Bucket=source_bucket,13 BucketLoggingStatus={}14 )15 print(f"Logging disabled for bucket '{source_bucket_name}'.")16 except ClientError as e:17 print(f"Error disabling logging for bucket '{source_bucket_name}': {e}")18
19# Пример использования20source_bucket = "bucket" # Бакет, для которого нужно отключить логирование21
22disable_bucket_logging(source_bucket)Приведенный код на Go:
- Импортирует неоходимые пакеты, в том числе официальный AWS SDK для Go.
- Определяет имя бакета, в котором нужно отключить логирование.
- Подгружает конфигурацию из
~/.aws/*. - Создает клиент для доступа к Object Storage.
- Передает пустую структуру
BucketLoggingStatus, чтобы отключить логирование. - Если логирование отключено успешно, выводит соответствующее сообщение.
1package main2
3import (4 "context"5 "fmt"6 "log"7
8 "github.com/aws/aws-sdk-go-v2/aws"9 "github.com/aws/aws-sdk-go-v2/config"10 "github.com/aws/aws-sdk-go-v2/service/s3"11 "github.com/aws/aws-sdk-go-v2/service/s3/types"12)13
14func main() {15 var bucketName = "bucket"16
17 // Подгружает конфигурацию из ~/.aws/*18 cfg, err := config.LoadDefaultConfig(context.TODO())19 if err != nil {20 log.Fatal(err)21 }22
23 // Создает клиент для доступа к Object Storage24 client := s3.NewFromConfig(cfg)25
26 // Передает пустую структуру BucketLoggingStatus27 _, err = client.PutBucketLogging(context.TODO(), &s3.PutBucketLoggingInput{28 Bucket: aws.String(bucketName),29 BucketLoggingStatus: &types.BucketLoggingStatus{30 // Пустая структура отключает логирование31 },32 })33 if err != nil {34 log.Fatalf("failed to disable logging, %v", err)35 }36
37 fmt.Println("Logging disabled successfully")38}