DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workloads.

Related

  • The Essentials of Amazon S3 Glacier for Affordable and Compliant Long-Term Data Archiving
  • Create CloudWatch Custom Log Metric Alarm Notification Email Solution Using Terraform
  • How To Set up a Multi-Account Dashboard
  • SRE vs AWS DevOps: A Personal Experience Comparison

Trending

  • Detection and Mitigation of Lateral Movement in Cloud Networks
  • Secrets Sprawl and AI: Why Your Non-Human Identities Need Attention Before You Deploy That LLM
  • Accelerating Debugging in Integration Testing: An Efficient Search-Based Workflow for Impact Localization
  • Can You Run a MariaDB Cluster on a $150 Kubernetes Lab? I Gave It a Shot
  1. DZone
  2. Software Design and Architecture
  3. Cloud Architecture
  4. Monitoring and Logging in Cloud Architecture With Python

Monitoring and Logging in Cloud Architecture With Python

This article delves into the synergy between Python and cloud platforms, which creates the possibility of easier development of more transparent applications.

By 
Dmitrii Mitiaev user avatar
Dmitrii Mitiaev
·
Nov. 21, 23 · Analysis
Likes (22)
Comment
Save
Tweet
Share
9.7K Views

Join the DZone community and get the full member experience.

Join For Free

Logging and monitoring are tools crucial for maintaining your infrastructure’s health. While log data offers valuable insights into the inner processes of applications and databases, error monitoring further intensifies it by addressing vulnerabilities. Integrating both ensures a seamless user experience. Further points of usefulness include:

  • Enhanced Traceability: Logging records every activity and enables traceability of actions, thereby making the system more secure and able to detect any unauthorized accesses.
  • Proactive Problem Detection: Monitoring and alerting allow for early detection and intervention, ensuring uninterrupted service.
  • Compliance and Auditing: In regulated industries, logging facilitates compliance with mandated standards, ensuring readiness for reviews.
  • Automated Responses: Coupled with monitoring, alerting can trigger automatic corrective actions, thereby ensuring system resilience.

Over that, logging and monitoring through cloud architecture is crucial since it enables optimal performance and rapid issue resolution. With Python, a language best known for its versatility and simplicity, interfacing with cloud architectures becomes even more seamless. This article delves into the synergy between Python and cloud platforms, which creates the possibility of easier development of more transparent applications.

Advantages of Cloud-Based Monitoring

Continuing the discussion of traditional methods, monitoring systems in a more traditional sense necessitates a degree of hands-on management. Cloud-based monitoring, in turn, provides a more streamlined approach. It brings forth numerous advantages:

  • With cloud monitoring, there's no need to set up dedicated infrastructure or maintain hardware. This translates to a significant reduction in both setup time and operational costs.
  • The cloud is scalable. As your monitoring needs grow, your cloud-based solution can scale effortlessly without requiring manual intervention or the restructuring of existing systems.
  • Cloud solutions often offer real-time insights. Wherever you are, you can instantly access logs, metrics, and performance data from any device connected to the internet.
  • Cloud-based monitoring platforms often come with integrated alerting mechanisms. If any metrics go beyond acceptable thresholds, notifications can be sent instantly through various channels like email, SMS, or even mobile applications.
  • It also provides a comprehensive integration with other cloud services. If you’re already utilizing other cloud services, integration is often seamless. This ensures comprehensive monitoring across all cloud assets.

Built-in Python Logging Module

Python comes with a native logging module, and its intrinsic strength stems from its integration within the language itself. When you're working with Python code, there's an inherent ability for that code to produce logs. With just a simple import... statement, this built-in module can be exploited.

What sets the built-in Python logging module apart is its extensiveness: beyond just basic logging, it provides a framework for a distributed logging infrastructure. This means you're not just limited to collecting logs — you can set up advanced features like alerts and monitoring. In other words, users have the autonomy to tailor the logging to their specific needs and to maintain and manage it themselves.

Let’s say you are sending logs to AWS CloudWatch. Although the AWS token provides flexibility and granular control over log submissions, it can be burdensome when done frequently. Manually ensuring the right sequence token, converting timestamps, and crafting the right log message structure adds unnecessary upkeep. 

In such situations, developers tend to create a wrapper function, say log(...), that hides the complexities of fetching the sequence token and building the specific AWS request. This way, they can simply call log(the_message) whenever they need to log something without getting bogged down by the details each time.

Taking all this into account, it’s time to look at the particular examples of logging and monitoring in the top cloud service providers — Amazon Web Services and Google Cloud Platform — utilizing Python. 

Embedding Logging in GCP

Google Cloud Platform (GCP) provides a comprehensive suite of tools and services for logging and monitoring. Here’s a step-by-step guide to embedding Cloud Logging in your application using Python:

1. Authorization

Navigate to the GCP Console, then go to IAM & Admin > Service Accounts. Create a new service account and download the JSON key. This JSON contains the credentials your application will use to authenticate.

Set an environment variable name GOOGLE_APPLICATION_CREDENTIALS that points to the path of the service account JSON key you downloaded.

Python
 
export 
GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"


2. Setting Up Cloud Logging

Before integrating Cloud Logging, ensure you have a GCP project set up and the necessary APIs enabled. Navigate to the Logging section in the GCP Console to set up the logging environment.

3. Installing Client Libraries

For various programming languages like Python, Java, Node.js, and others, GCP provides client libraries. Install these using package manager, pip:

Python
 
pip install --upgrade google-cloud-logging


4. Initialising the Logger

Once the client library is installed, you initialize the logger within your application:

Python
 
from google.cloud import logging
client = logging.Client()
logger = client.logger("log_name")


5. Embedding Log Entries

With the logger initialized, you now start inserting log entries within your application code:

Python
 
logger.log_text("Log entry here!")


6. Structured Logging

GCP supports structured logs, which are more readable and allow for advanced filtering:

Python
 
log_payload = {"event": "user_signup", "user_id": 12345, "username": "johndoe"}
logger.log_struct(log_payload)


NB: Structured logging allows for more straightforward and faster querying, filtering, and analysis, especially when dealing with large volumes of log data. Since each log entry follows a predictable structure, tools can effortlessly parse and analyze them, turning raw logs into actionable insights.

7. Setting Log Severity

Furthermore, classifying logs by severity helps in filtering and prioritizing issues:

Python
 
logger.log_text("Critical issue detected!", severity="CRITICAL")


8. Viewing Logs

After integrating logging, navigate to the Logs Explorer in the GCP Console. Here, you view, filter, and analyze the logs emitted by your application.

Embedding Logging in AWS

Just the same as the previous one, Amazon Web Services (AWS) offers an extensive array of tools and services tailored for logging and monitoring, with Amazon CloudWatch Logs being a primary service. A manual on embedding CloudWatch Logs into your application is the following:

1. Authorization

AWS uses Identity and Access Management (IAM) for authentication and authorization. You usually authenticate via IAM Users.

Navigate to the AWS Management Console. Go to Services > IAM > Users. Add a new user, granting programmatic access to get an access key ID and a secret access key. Attach policies to the user that allow access to CloudWatch Logs, such as CloudWatchLogsFullAccess.

When using an SDK or the AWS CLI, you'll need to configure your credentials. These can be set up using environment variables (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY), AWS configuration files, or they can be automatically sourced from IAM roles when used within AWS services.

2. Setting Up CloudWatch Logs

First, ensure you have an AWS account and the necessary permissions to access CloudWatch. Navigate to the CloudWatch service in the AWS Management Console to set up your logging environment.

3. Installing AWS SDK

AWS provides SDKs for multiple languages such as Python, Node.js, Java, and more. To interact with CloudWatch Logs, you'll need to include the SDK in your project:

Python
 
 pip install boto3


4. Initialising the CloudWatch Logs Client

Python
 
import boto3
client = boto3.client('logs')


5. Creating a Log Group and Stream

Before sending logs, you need a log group and a log stream. These can be created through the AWS console or programmatically:

Python
 
log_group_name = 'MyApplicationLogGroup'
log_stream_name = 'MyLogStream'
client.create_log_group(logGroupName=log_group_name)
client.create_log_stream(logGroupName=log_group_name, 
logStreamName=log_stream_name)


6. Publishing Log Events

Python
 
log_message = 'Sample log message here'
response = client.describe_log_streams(logGroupName=log_group_name, logStreamNamePrefix=log_stream_name)
sequence_token = response['logStreams'][0]['uploadSequenceToken']
client.put_log_events(
    logGroupName=log_group_name,
    logStreamName=log_stream_name,
    logEvents=[{'timestamp': time.perf_counter_ns()//1_000_000, 'message': 
log_message}],
    sequenceToken=sequence_token
)


Note that if you are using Python versions lower than 3.7, the method time.perf_counter_ns() is not available. Instead, you can use the time.time() method. To convert this value to milliseconds, you can multiply it by 1000:

Python
 
logEvents = [{'timestamp': time.time() * 1000, 'message': log_message}]

 

7. Viewing and Analysing Logs

Navigate to the CloudWatch Logs section in the AWS Management Console. Here, you view, filter, and analyze the logs your application sends.

Creating Alerts: Prompt Responses in GCP and AWS

Alerts act as the first line of defense against potential issues, ensuring you are informed promptly about deviations or system disruptions. Both GCP and AWS offer tools to set up alerts based on log patterns or metrics. Here's how to get started on each platform:

Alerting in GCP Using Cloud Monitoring

1. Setting Up Workspace: Navigate to the Cloud Monitoring section in the GCP Console. If you haven't already, create a workspace associated with your project.

2. Creating Alerting Policies 

  • Within Cloud Monitoring, click on Alerting, followed by Create Policy. 
  • Name the policy and set the conditions based on metrics (like CPU usage) or logs-based metrics that you've configured.
  • Define the threshold and duration for which the condition must hold true.

3. Notification Channels

  • In the same policy, select Add Notification Channel.
  • Choose a notification mechanism like email, SMS, or integration with third-party apps like Slack or PagerDuty.

Now save it, test the alert to ensure notifications are dispatched correctly, and you’re done!

Alerting in AWS Using CloudWatch Alarms

1. Navigate to CloudWatch: In the AWS Management Console, head to the CloudWatch service.

2. Create Alarm

  • Click on Alarms in the sidebar and then Create Alarm.
  • Choose a metric (like EC2 instance CPU utilization) or a filter based on CloudWatch Logs.
  • Configure the conditions, specifying the threshold and evaluation periods.

3. Setting Up Actions

  • Define what should happen when the alarm state is triggered. This can range from sending an SNS notification to auto-scaling EC2 instances.
  • For notifications, you typically tie the alarm to an SNS topic, which then sends the alert to subscribed email addresses and SMS or integrates with other notification systems.

Afterward, go over the alarm settings, ensure everything is configured correctly, and then create the alarm.

Conclusion

Now, I hope that it’s evident that cloud services not only enhance application transparency and performance insights but also offer timely and flexible alert mechanisms — this real-time feedback is crucial for maintaining application efficiency. Moreover, the cost-efficiency of cloud solutions is notable. Unlike resource-intensive and complex infrastructures like ELK stack, cloud logging, and monitoring provide comparable capabilities without the sizable price tag. In essence, with Python and cloud architecture used as a couple, developers can achieve better insights, rapid troubleshooting, and significant savings, all wrapped in simplicity.

AWS Amazon Web Services Architecture Software development kit Cloud Python (language)

Opinions expressed by DZone contributors are their own.

Related

  • The Essentials of Amazon S3 Glacier for Affordable and Compliant Long-Term Data Archiving
  • Create CloudWatch Custom Log Metric Alarm Notification Email Solution Using Terraform
  • How To Set up a Multi-Account Dashboard
  • SRE vs AWS DevOps: A Personal Experience Comparison

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!