Introduction to Data Monitoring
Data monitoring is a critical aspect of the data engineer's role. It involves tracking, analyzing, and managing data to ensure its accuracy, reliability, and timeliness. By monitoring data, engineers can identify potential issues, detect anomalies, and take proactive measures to maintain data quality and integrity.
Monitoring data allows organizations to:
Identify Data Issues: By continuously monitoring data, engineers can detect and resolve issues such as missing or invalid data, data duplication, and inconsistencies.
Ensure Data Quality: Data monitoring enables engineers to validate data against predefined quality standards and identify discrepancies or errors that might impact data analysis and decision-making.
Optimize Performance: Monitoring data performance helps identify bottlenecks, optimize data pipelines, and improve query response times, ensuring efficient data processing and analysis.
Track Data Usage: Monitoring data usage provides insights into data consumption patterns, usage trends, and resource utilization, helping organizations make informed decisions about data storage, capacity planning, and infrastructure optimization.
As a data engineer, you will leverage various tools and techniques to monitor data effectively. Some commonly used tools include data visualization platforms, log monitoring systems, and performance monitoring tools.
In the upcoming lessons, we will explore different aspects of data monitoring, including performance optimization techniques, monitoring tools, setting up data monitoring processes, and ensuring data quality.
Let's start by loading a dataset and displaying the first few rows using Python:
1# Python code here
2import pandas as pd
3
4# Load dataset
5data = pd.read_csv('data.csv')
6
7# Display first 5 rows
8print(data.head())
xxxxxxxxxx
import pandas as pd
# Load dataset
data = pd.read_csv('data.csv')
# Display first 5 rows
print(data.head())
Build your intuition. Fill in the missing part by typing it in.
Data monitoring is a critical aspect of the data engineer's role. It involves tracking, analyzing, and managing data to ensure its ___, reliability, and timeliness. By monitoring data, engineers can identify potential issues, detect anomalies, and take proactive measures to maintain data quality and integrity.
Monitoring data allows organizations to:
Identify Data Issues: By continuously monitoring data, engineers can detect and resolve issues such as missing or invalid data, data duplication, and inconsistencies.
Ensure Data Quality: Data monitoring enables engineers to validate data against predefined quality standards and identify discrepancies or errors that might impact data analysis and decision-making.
Optimize Performance: Monitoring data performance helps identify bottlenecks, optimize data pipelines, and improve query response times, ensuring efficient data processing and analysis.
Track Data Usage: Monitoring data usage provides insights into data consumption patterns, usage trends, and resource utilization, helping organizations make informed decisions about data storage, capacity planning, and infrastructure optimization.
Write the missing line below.
Performance Optimization Techniques
Performance optimization techniques are crucial for data engineers to ensure efficient data processing and improve overall data performance. By implementing these techniques, data engineers can optimize data pipelines, minimize latency, and enhance query response times. In this section, we will explore some key performance optimization techniques commonly used in data engineering:
Indexing: Indexing is the process of creating data structures, such as B-trees or hash tables, to improve data retrieval efficiency. By indexing frequently queried columns, data engineers can speed up query execution and reduce the need for full table scans.
Partitioning: Partitioning involves dividing large datasets into smaller, more manageable partitions based on a specific column or criterion. This technique helps distribute data across multiple storage units or nodes, improving data processing parallelism and reducing query response times.
Caching: Caching is the process of storing frequently accessed data in memory to minimize the need for repeated disk reads. By implementing an efficient caching mechanism, data engineers can significantly improve data retrieval performance and reduce latency.
Query Optimization: Query optimization involves analyzing data query plans, indexes, and execution statistics to identify and implement optimizations that improve query performance. Techniques such as query rewriting, join reordering, and predicate pushdown can significantly enhance query execution speed and efficiency.
Data Denormalization: Denormalization is the process of combining normalized data tables into a single table to eliminate the need for complex joins. By denormalizing data, data engineers can improve query performance by reducing the number of join operations.
By applying these performance optimization techniques, data engineers can ensure that data processing and analysis are efficient, resulting in faster query execution and improved overall data performance.
xxxxxxxxxx
if __name__ == "__main__":
# Python logic here
pass
Let's test your knowledge. Click the correct answer from the options.
Which technique involves dividing large datasets into smaller, more manageable partitions based on a specific column or criterion?
Click the option that best answers the question.
- Denormalization
- Indexing
- Partitioning
- Caching
Monitoring Tools
Monitoring data is essential for data engineers to ensure the availability, integrity, and performance of data systems. Monitoring tools provide insights into the health and functioning of data pipelines, databases, and infrastructure. By leveraging these tools, data engineers can proactively identify and address issues, optimize performance, and ensure data quality.
1. Prometheus
Prometheus is an open-source monitoring system that collects and stores time-series data. It provides a dimensional data model and powerful query language for processing and visualizing metrics. Prometheus is widely used for monitoring distributed systems and is well-suited for containerized environments like Docker.
2. Grafana
Grafana is an open-source platform for data visualization and monitoring. It integrates with various data sources, including Prometheus, to display metrics in real-time dashboards. Grafana supports a wide range of visualizations and provides alerting capabilities, making it a popular choice for data engineers and DevOps teams.
3. ELK Stack
The ELK (Elasticsearch, Logstash, Kibana) Stack is a popular logging and monitoring solution. Elasticsearch is a distributed search and analytics engine, Logstash is a data pipeline tool, and Kibana is a data visualization and exploration platform. Together, they form a powerful monitoring stack that enables data engineers to centralize logs, analyze data, and gain insights into system behavior.
4. Apache Kafka
Apache Kafka is a distributed streaming platform that can be used for real-time data monitoring and analytics. It provides a scalable and fault-tolerant architecture for handling high-volume data streams. Kafka is often used in conjunction with other monitoring tools to ingest and process real-time data from various sources.
5. Snowflake
Snowflake is a cloud-based data warehousing platform that offers built-in monitoring and performance optimization features. It provides granular visibility into query performance, resource utilization, and data access patterns. Data engineers can leverage Snowflake's monitoring capabilities to identify and optimize inefficient queries, manage resource allocation, and ensure optimal data storage and retrieval.
xxxxxxxxxx
if __name__ == "__main__":
# Python logic here
import pandas as pd
# Load and explore the data
data = pd.read_csv("data.csv")
print(data.head())
# Perform data monitoring
# ...
Are you sure you're getting this? Click the correct answer from the options.
Which monitoring tool is commonly used for visualizing metrics in real-time dashboards?
Click the option that best answers the question.
- Prometheus
- Grafana
- ELK Stack
- Apache Kafka
- Snowflake
Setting Up Data Monitoring
Setting up data monitoring is a crucial step in ensuring the availability, integrity, and performance of data systems in an organization. By monitoring data, organizations can proactively detect and address issues, optimize performance, and ensure data quality. In this section, we will discuss the steps involved in setting up data monitoring.
Step 1: Choose a Monitoring Tool
The first step in setting up data monitoring is to choose an appropriate monitoring tool. There are various monitoring tools available, each with its own set of features and capabilities. As a data engineer with experience in Python, Snowflake, SQL, Spark, and Docker, you have a wide range of options to choose from.
Step 2: Install and Configure the Monitoring Tool
Once you have chosen a monitoring tool, the next step is to install and configure it. Depending on the tool you have chosen, the installation and configuration process may vary. It is important to carefully follow the documentation and instructions provided by the monitoring tool.
Step 3: Connect to the Data Source
After installing and configuring the monitoring tool, you need to connect it to the data source you want to monitor. This could be a database, data pipeline, or any other data system. You will need to provide the necessary connection details, such as database credentials, host, port, etc.
Step 4: Configure Monitoring Parameters
Once the monitoring tool is connected to the data source, you need to configure the monitoring parameters. This includes setting up monitoring intervals, thresholds, and alerts. You can define specific metrics to monitor, such as CPU usage, memory usage, query performance, etc.
Step 5: Enable Data Monitoring
The final step in setting up data monitoring is to enable it. This typically involves executing specific commands or queries to enable monitoring functionality. For example, if you are using Snowflake, you can enable data monitoring by executing the following SQL query:
1if __name__ == "__main__":
2 import snowflake.connector
3
4 # Connect to Snowflake
5 conn = snowflake.connector.connect(
6 user='your_username',
7 password='your_password',
8 account='your_account'
9 )
10
11 # Create a cursor
12 cur = conn.cursor()
13
14 # Execute SQL queries
15 cur.execute('USE DATABASE your_database')
16 cur.execute('USE SCHEMA your_schema')
17
18 # Enable data monitoring
19 cur.execute('ALTER USER your_username SET MONITORING = TRUE')
20
21 cur.close()
22 conn.close()
By enabling data monitoring, you will start collecting and analyzing data metrics, which will allow you to gain insights into the health and performance of your data systems.
Now that you understand the steps involved in setting up data monitoring, you are ready to implement it in your organization. Remember to regularly review and fine-tune your monitoring parameters to ensure optimal performance and data quality.
xxxxxxxxxx
import snowflake.connector
# Connect to Snowflake
conn = snowflake.connector.connect(
user='your_username',
password='your_password',
account='your_account'
)
# Create a cursor
cur = conn.cursor()
# Execute SQL queries
cur.execute('USE DATABASE your_database')
cur.execute('USE SCHEMA your_schema')
# Enable data monitoring
cur.execute('ALTER USER your_username SET MONITORING = TRUE')
cur.close()
conn.close()
Are you sure you're getting this? Is this statement true or false?
Setting up data monitoring involves choosing a monitoring tool and connecting it to the data source.
Press true if you believe the statement is correct, or false otherwise.
Monitoring Data Quality
Monitoring data quality is crucial in ensuring the reliability and accuracy of data within an organization. As a data engineer with experience in Python, Snowflake, SQL, Spark, and Docker, you have a wide range of tools and techniques at your disposal to monitor and ensure data quality.
Importance of Data Quality
Data quality directly impacts the effectiveness of any data-related initiatives within an organization. Poor data quality can lead to incorrect analysis, flawed decision-making, and unreliable insights. Therefore, it is essential to have a robust data quality monitoring process in place.
Key Metrics for Data Quality Monitoring
There are several key metrics that can be used to monitor and assess data quality:
- Completeness: Measures the extent to which the data is complete, with no missing values or fields.
- Accuracy: Determines the correctness and precision of the data, ensuring that it aligns with the actual values and facts.
- Consistency: Checks for consistent data across different sources and systems, ensuring data integrity.
- Validity: Verifies that the data adheres to defined validation rules and constraints.
- Timeliness: Measures the timeliness and freshness of the data, ensuring it is up-to-date and useful for analysis.
Techniques for Data Quality Monitoring
To monitor data quality effectively, you can employ various techniques:
Data Profiling: Analyzes the data to identify patterns, inconsistencies, and anomalies. It helps to understand the overall quality of the data and uncover data quality issues.
Data Cleansing: Involves the process of identifying and correcting or removing errors, inconsistencies, and inaccuracies in the data. This can include removing duplicate records, filling in missing values, and standardizing the format of data.
Data Validation: Verifies the accuracy, integrity, and compliance of data by comparing it against predefined validation rules and constraints. This ensures that the data is reliable and suitable for use.
Data Monitoring and Alerting: Sets up automated monitoring processes to continuously monitor data quality metrics. Alerts can be triggered when data quality issues are detected, allowing for timely resolution.
Example Python Code for Data Quality Monitoring
Here is an example of Python code that demonstrates how to perform data quality monitoring using pandas library:
1import pandas as pd
2
3def check_data_quality(df):
4 # Check completeness
5 completeness = df.isnull().sum().sum()
6 if completeness > 0:
7 print(f"Data completeness check failed! Missing {completeness} values.")
8 else:
9 print("Data completeness check passed. All values are present.")
10
11 # Check accuracy
12 # ... (add code to perform accuracy check)
13
14 # Check consistency
15 # ... (add code to perform consistency check)
16
17 # Check validity
18 # ... (add code to perform validity check)
19
20 # Check timeliness
21 # ... (add code to perform timeliness check)
22
23 print("Data quality monitoring complete.")
24
25# Load data from a CSV
26data = pd.read_csv('data.csv')
27
28# Perform data quality monitoring
29check_data_quality(data)
Let's test your knowledge. Is this statement true or false?
Data quality monitoring includes techniques such as data profiling, data cleansing, data validation, and data monitoring and alerting.
Press true if you believe the statement is correct, or false otherwise.
Query Optimization
Query optimization is a crucial aspect of data monitoring and performance optimization. When working with large datasets and complex queries, optimizing the queries can significantly improve their performance and reduce resource usage.
Importance of Query Optimization
Efficient query execution is essential for achieving faster response times, reducing processing costs, and improving overall system performance. By optimizing queries, data engineers can ensure that the queries are executed in the most efficient manner, leading to better utilization of system resources.
Techniques for Query Optimization
There are several techniques that can be employed to optimize data queries:
Indexing: Creating appropriate indexes on the columns used in the query can speed up data retrieval operations. Indexes allow the database engine to quickly locate the required data, resulting in improved query performance.
Query Rewriting: Analyzing the query structure and rewriting it in a more optimized form can eliminate unnecessary joins, subqueries, or redundant operations. This optimization technique helps reduce the processing time and improves query performance.
Partitioning: Partitioning data based on specific criteria, such as date ranges or values, can improve query performance by limiting the amount of data that needs to be scanned. Partitioning allows for faster data retrieval and can be particularly beneficial for large datasets.
Caching: Storing frequently accessed query results in cache memory can help eliminate the need for repeated execution of the same query. Cached query results can be retrieved quickly, resulting in improved response times.
Example Python Code for Query Optimization
Here is an example of Python code that demonstrates how to optimize a query using pandas library:
1import pandas as pd
2
3# Function to optimize query
4
5# ... (add code for optimize_query function)
6
7# Sample query
8query = 'SELECT * FROM my_table'
9
10# Optimize query
11optimized_query = optimize_query(query)
12
13# Print optimized query
14print(optimized_query)
In this example, the optimize_query
function takes a query as input and applies optimization techniques to improve its performance. The optimized query is then printed.
xxxxxxxxxx
import pandas as pd
def optimize_query(query):
# Python logic to optimize query here
return optimized_query
# Sample query
query = 'SELECT * FROM my_table'
# Optimize query
optimized_query = optimize_query(query)
# Print optimized query
print(optimized_query)
Build your intuition. Is this statement true or false?
Query optimization is the process of improving the performance of data queries.
Press true if you believe the statement is correct, or false otherwise.
Data Storage Optimization
Data storage optimization is an essential aspect of data monitoring and performance optimization. By optimizing data storage, data engineers can reduce storage costs, improve query performance, and ensure efficient data retrieval.
Methods for Data Storage Optimization
There are several methods that can be employed to optimize data storage:
Removing Duplicate Rows: Duplicate rows in a dataset can consume unnecessary storage space. By identifying and removing duplicate rows, data engineers can optimize data storage.
Handling Missing Values: Missing values in a dataset can lead to inefficient storage utilization. Data engineers can handle missing values by either imputing them or removing the corresponding rows/columns, depending on the nature of the data and the analysis requirements.
Dropping Low-Value Columns: Some columns in a dataset may have low information value or may not be relevant to the analysis goals. By dropping such columns, data engineers can reduce storage overhead and improve query performance.
Compressing Data Types: By optimizing data types, data engineers can reduce the storage space required for each value. For example, converting an integer column with a small range of values to a smaller data type, such as int32, can save storage space without sacrificing data integrity.
Example Python Code for Data Storage Optimization
Here is an example of Python code that demonstrates how to optimize data storage using pandas library:
1import pandas as pd
2
3# Example code to optimize data storage
4
5def optimize_data_storage(data: pd.DataFrame) -> pd.DataFrame:
6 # Remove duplicate rows
7 data = data.drop_duplicates()
8
9 # Check for missing values
10 missing_values = data.isnull().sum()
11
12 # Drop columns with high missing values
13 high_missing_columns = missing_values[missing_values > 0.5 * len(data)].index
14 data = data.drop(high_missing_columns, axis=1)
15
16 # Compress data types
17 compressed_data = data.copy()
18 for column in data.columns:
19 data_type = data[column].dtype
20 if data_type == 'int64':
21 compressed_data[column] = data[column].astype('int32')
22 elif data_type == 'float64':
23 compressed_data[column] = data[column].astype('float32')
24
25 return compressed_data
26
27
28if __name__ == '__main__':
29 # Read data from file
30 data = pd.read_csv('data.csv')
31
32 # Optimize data storage
33 optimized_data = optimize_data_storage(data)
34
35 # Save optimized data to file
36 optimized_data.to_csv('optimized_data.csv', index=False)
In this example, the optimize_data_storage
function takes a pandas DataFrame as input and applies various optimizations, such as removing duplicate rows, handling missing values, dropping low-value columns, and compressing data types. The optimized data is then saved to a file.
By implementing these methods, data engineers can optimize data storage and reduce costs while maintaining data integrity and query performance.
xxxxxxxxxx
optimized_data.to_csv('optimized_data.csv', index=False)
import pandas as pd
# Example code to optimize data storage
def optimize_data_storage(data: pd.DataFrame) -> pd.DataFrame:
# Remove duplicate rows
data = data.drop_duplicates()
# Check for missing values
missing_values = data.isnull().sum()
# Drop columns with high missing values
high_missing_columns = missing_values[missing_values > 0.5 * len(data)].index
data = data.drop(high_missing_columns, axis=1)
# Compress data types
compressed_data = data.copy()
for column in data.columns:
data_type = data[column].dtype
if data_type == 'int64':
compressed_data[column] = data[column].astype('int32')
elif data_type == 'float64':
compressed_data[column] = data[column].astype('float32')
return compressed_data
if __name__ == '__main__':
# Read data from file
Try this exercise. Is this statement true or false?
Data storage optimization is primarily focused on reducing storage costs.
Press true if you believe the statement is correct, or false otherwise.
Real-time Monitoring and Alerting
Real-time monitoring and alerting systems are crucial components of data monitoring. These systems enable data engineers to proactively detect and respond to anomalies, issues, and events in real-time, ensuring the availability, reliability, and performance of data systems.
Importance of Real-time Monitoring and Alerting
Real-time monitoring and alerting systems provide immediate visibility into data and infrastructure performance, allowing data engineers to identify and address problems as soon as they occur. By detecting issues in real-time, data engineers can minimize downtime, mitigate risks, and prevent data loss or corruption.
For example, imagine you are a data engineer responsible for managing a real-time data pipeline that processes vast amounts of streaming data. Without a real-time monitoring and alerting system, you would have limited visibility into the health and performance of the pipeline. As a result, you might not be aware of critical issues, such as data ingestion failures or processing bottlenecks, until they cause significant disruptions to downstream applications or data consumers.
Implementing a real-time monitoring and alerting system allows you to promptly detect issues, such as abnormal data patterns, high latency, or system failures. You can set up proactive alerts and notifications that trigger immediate actions when predefined thresholds or conditions are met. This enables you to take timely measures, such as scaling resources, identifying root causes, or triggering automated recovery processes, to maintain the stability and efficiency of your data systems.
Key Components of Real-time Monitoring and Alerting Systems
Real-time monitoring and alerting systems typically involve the following components:
Data Collection Agents: These are responsible for collecting and aggregating data from various sources, such as databases, streaming platforms, log files, and infrastructure metrics. Data collection agents can be deployed as software agents, lightweight processes, or connectors and connectors that integrate with different data sources and extract relevant data in real-time.
Streaming Data Processing: Streaming data processing platforms, such as Apache Kafka, Apache Flink, or Apache Samza, are often used to handle high-velocity data streams. These platforms provide capabilities for buffering, filtering, transforming, and aggregating data in real-time. They ensure that data engineers can process incoming data efficiently and extract meaningful insights and metrics.
Real-time Analytics: Real-time analytics engines, such as Apache Spark Streaming, Apache Storm, or AWS Kinesis Analytics, enable data engineers to perform complex analysis on streaming data. These engines allow you to apply algorithms, perform statistical computations, and build real-time dashboards or visualizations to monitor key metrics and indicators.
Alerting and Notification Mechanisms: Alerting and notification mechanisms are an essential part of real-time monitoring systems. These mechanisms allow you to define rules, conditions, or thresholds that trigger alerts and notifications when specific events or anomalies occur. Common mechanisms include email notifications, instant messaging, SMS alerts, or integration with incident management systems like PagerDuty or OpsGenie.
Example Python Code for Real-time Monitoring and Alerting
Implementing real-time monitoring and alerting systems often involves writing custom code or using specialized libraries and frameworks. Here's an example of Python code that demonstrates how to set up a simple real-time monitoring and alerting system using Apache Kafka and Prometheus:
1from kafka import KafkaConsumer
2from prometheus_client import Counter
3
4# Create Kafka consumer
5consumer = KafkaConsumer(
6 'topic_name',
7 bootstrap_servers=['kafka_broker1:9092','kafka_broker2:9092','kafka_broker3:9092'],
8 group_id='consumer_group',
9 auto_offset_reset='latest'
10)
11
12# Define Prometheus counter
13message_counter = Counter('messages_received', 'Number of messages received')
14
15# Consume messages from Kafka topic
16for message in consumer:
17 # Process and analyze the message
18 process_message(message.value)
19
20 # Increment Prometheus counter
21 message_counter.inc()
22
23 # Check for anomalies and trigger alerts
24 check_for_anomalies(message.value)
25
26 # Send notifications
27 send_notifications(message.value)
In this example, the code sets up a Kafka consumer that consumes messages from a specific topic. As messages are received, they are processed, and analytics and monitoring tasks are performed. The code increments a Prometheus counter to track the number of messages received and checks for anomalies or triggers alerts based on predefined rules. Notifications can be sent to appropriate channels to notify relevant stakeholders or initiate automated actions.
By leveraging the power of real-time monitoring and alerting systems, data engineers can ensure the timely detection and resolution of issues, enabling reliable and performant data systems.
Try this exercise. Is this statement true or false?
Real-time monitoring and alerting systems are only used to detect and respond to historical issues.
Press true if you believe the statement is correct, or false otherwise.
Data Monitoring Best Practices
As a data engineer, it's essential to follow best practices for effective data monitoring. By implementing these practices, you can ensure the availability, reliability, and performance of your data systems. Let's explore some key best practices to consider:
1. Define Clear Objectives and Metrics
Before implementing data monitoring, it's crucial to define clear objectives and identify the metrics that align with those objectives. A clear understanding of what you want to monitor and measure will help you focus on the most critical aspects of your data systems. For example, if you're monitoring a real-time data processing pipeline, you might define objectives such as maintaining low latency and high throughput. The corresponding metrics could include message processing time, event count, and throughput rate.
2. Set Measurable Thresholds
In addition to defining objectives and metrics, it's essential to set measurable thresholds for your metrics. These thresholds represent the acceptable ranges or limits for each metric. By setting thresholds, you can detect anomalies or issues when the metric values fall outside the expected range. For instance, you might set a threshold for CPU utilization to trigger an alert when it exceeds 80%. Setting measurable thresholds helps you proactively identify and address potential problems before they cause significant disruptions.
3. Implement Real-Time Monitoring
Real-time monitoring allows you to detect issues and anomalies as they occur, enabling prompt actions and interventions. Implementing real-time monitoring systems, such as the one discussed in a previous screen, helps you maintain the stability and performance of your data systems. By monitoring metrics in real-time, you can promptly identify issues like high latency, system failures, or abnormal data patterns. This enables you to take immediate measures, such as scaling resources or triggering automated recovery processes, to address the issues timely.
4. Establish Proper Data Retention Policies
Data retention policies define how long you store the collected monitoring data. It's important to establish proper data retention policies to balance storage costs and compliance requirements. Consider factors such as data volume, storage costs, legal/regulatory requirements, and the usefulness of historical data for troubleshooting or analysis. For example, you might choose to retain historical monitoring data for a specific period based on legal requirements and discard older data that is no longer useful.
5. Automate Alerting and Notification
Alerting and notification mechanisms play a critical role in data monitoring. Automating the alerting and notification processes ensures that the right stakeholders are promptly informed when issues or anomalies occur. You can set up alerting rules based on predefined thresholds or conditions for each metric and configure notification channels like email, messaging apps, or incident management systems. Automating the alerting and notification processes helps you save time and ensures that the appropriate actions are taken as soon as possible.
6. Regularly Review and Optimize Monitoring Setup
Data systems and their requirements evolve over time. To ensure efficient data monitoring, it's important to regularly review and optimize your monitoring setup. Stay updated with changing business needs, system architectures, new technologies, and emerging best practices. Regularly review your objectives, metrics, thresholds, and monitoring tools. Adjust and optimize them as needed to align with your organization's changing requirements and ensure that your data monitoring remains effective.
By following these best practices, you can establish a robust and reliable data monitoring framework that helps you maintain the performance, availability, and quality of your data systems.
xxxxxxxxxx
if __name__ == "__main__":
# Python logic here
pass
Let's test your knowledge. Click the correct answer from the options.
Which of the following is NOT a best practice for data monitoring?
Click the option that best answers the question.
- Set clear objectives and metrics
- Implement real-time monitoring
- Avoid setting measurable thresholds
- Automate alerting and notification
Generating complete for this lesson!