В современной разработке программного обеспечения ведение журналов играет решающую роль в мониторинге и устранении неполадок приложений. Google Cloud Platform (GCP) предлагает надежное решение для ведения журналов под названием App Engine Logs, которое позволяет разработчикам собирать и анализировать журналы, созданные их приложениями, работающими в Google App Engine. В этой статье мы рассмотрим различные методы и приемы работы с журналами App Engine, сопровождаемые примерами кода.
- Использование средства просмотра журналов.
Просмотр журналов — это веб-инструмент, предоставляемый GCP, который позволяет просматривать, искать и фильтровать журналы приложений App Engine. Он предоставляет удобный интерфейс для просмотра журналов и получения информации о поведении вашего приложения. Вот пример использования средства просмотра журналов:
from google.cloud import logging
def view_logs(project_id, filter_str):
client = logging.Client(project=project_id)
logger = client.logger("appengine.googleapis.com%2Frequest_log")
entries = logger.list_entries(filter_=filter_str)
for entry in entries:
print(entry.payload)
- Экспорт журналов в облачное хранилище.
Журналы App Engine можно экспортировать в облачное хранилище для долгосрочного хранения, резервного копирования или дальнейшего анализа. Это позволяет вам сохранять журналы в целях обеспечения соответствия или выполнять расширенный анализ журналов с помощью таких инструментов, как BigQuery. Вот пример экспорта журналов в Cloud Storage:
from google.cloud import logging_v2
def export_logs(project_id, bucket_name, filter_str):
client = logging_v2.LoggingServiceV2Client()
parent = client.project_path(project_id)
sink_name = f"projects/{project_id}/sinks/{bucket_name}"
sink = {
"name": sink_name,
"destination": f"storage.googleapis.com/{bucket_name}",
"filter": filter_str,
"include_children": True,
}
response = client.create_sink(parent, sink)
print(f"Logs exported to Cloud Storage: {response.name}")
- Потоковая передача журналов в Pub/Sub.
Вы можете осуществлять потоковую передачу журналов App Engine в Pub/Sub, службу обмена сообщениями, предоставляемую GCP, для обработки журналов в режиме реального времени и запуска последующих рабочих процессов или уведомлений. Вот пример потоковой передачи журналов в Pub/Sub:
from google.cloud import logging_v2
def stream_logs_to_pubsub(project_id, topic_name, filter_str):
client = logging_v2.LoggingServiceV2Client()
parent = client.project_path(project_id)
sink = {
"name": f"projects/{project_id}/sinks/{topic_name}",
"destination": f"pubsub.googleapis.com/projects/{project_id}/topics/{topic_name}",
"filter": filter_str,
"include_children": True,
}
response = client.create_sink(parent, sink)
print(f"Logs streaming to Pub/Sub: {response.name}")
- Анализ журналов с помощью BigQuery.
Экспортируя журналы App Engine в BigQuery, вы можете использовать его мощные возможности запросов для выполнения сложного анализа журналов и получения более глубокого понимания производительности и поведения вашего приложения. Вот пример анализа журналов с помощью BigQuery:
from google.cloud import bigquery
def analyze_logs_with_bigquery(project_id, dataset_id, filter_str):
client = bigquery.Client(project=project_id)
query = f"""
SELECT *
FROM `{project_id}.{dataset_id}.appengine_googleapis_com_request_log`
WHERE {filter_str}
LIMIT 100
"""
query_job = client.query(query)
results = query_job.result()
for row in results:
print(row)
Журналы App Engine предлагают широкий спектр возможностей для анализа и использования журналов, созданных вашими приложениями. Независимо от того, используете ли вы средство просмотра журналов, экспорт журналов в облачное хранилище, потоковую передачу журналов в Pub/Sub или анализ журналов с помощью BigQuery, теперь у вас есть прочная основа для эффективной работы с журналами App Engine. Используя эти методы, вы можете получить ценную информацию, устранить неполадки и оптимизировать производительность вашего приложения.
Внедрив эти методы, вы сможете использовать возможности журналов App Engine и вывести управление и анализ журналов на новый уровень.