Halaman ini belum tersedia dalam bahasa lokal Anda. Kami berusaha keras untuk menambahkan lebih banyak versi bahasa. Terima kasih atas dukungan Anda.
- What's New
- Function Overview
- Service Overview (2.0)
- Billing (2.0)
- Getting Started (2.0)
-
User Guide (2.0)
- Using IAM to Grant Access to AOM
-
Connecting to AOM
- Connecting to AOM
- Managing Collector Base UniAgent
- Connecting Businesses to AOM
- Connecting Applications to AOM
-
Connecting Middleware and Custom Plug-ins to AOM
- Overview About Middleware and Custom Plug-in Connection to AOM
-
Connecting Middleware to AOM
- Ingesting MySQL Metrics to AOM
- Ingesting Redis Metrics to AOM
- Ingesting Kafka Metrics to AOM
- Ingesting Nginx Metrics to AOM
- Ingesting MongoDB Metrics to AOM
- Ingesting Consul Metrics to AOM
- Ingesting HAProxy Metrics to AOM
- Ingesting PostgreSQL Metrics to AOM
- Ingesting Elasticsearch Metrics to AOM
- Ingesting RabbitMQ Metrics to AOM
- Ingesting Other Middleware Metrics to AOM
- Connecting Custom Plug-ins to AOM
- Managing Middleware and Custom Plug-in Collection Tasks
- Connecting Running Environments to AOM
- Connecting Cloud Services to AOM
- Connecting Open-Source System to AOM
- Managing Log Ingestion
-
(New) Connecting to AOM
- AOM Access Overview
- Managing Collector Base UniAgent
- Connecting Businesses to AOM
- Connecting Components to AOM
-
Connecting Middleware to AOM
- Overview About Middleware Connection to AOM
- Ingesting MySQL Metrics to AOM
- Ingesting Redis Metrics to AOM
- Ingesting Kafka Metrics to AOM
- Ingesting Nginx Metrics to AOM
- Ingesting MongoDB Metrics to AOM
- Ingesting Consul Metrics to AOM
- Ingesting HAProxy Metrics to AOM
- Ingesting PostgreSQL Metrics to AOM
- Ingesting Elasticsearch Metrics to AOM
- Ingesting RabbitMQ Metrics to AOM
- Managing Middleware Collection Tasks
- Connecting Running Environments to AOM
- Connecting Cloud Services to AOM
- Ingesting Data to AOM Using Open-Source APIs and Protocols
- Managing Metric and Log Ingestion
- Observability Metric Browsing
- Dashboard Monitoring
- Alarm Monitoring
- (New) Log Management
- Log Management (Old)
-
Prometheus Monitoring
- Prometheus Monitoring Overview
- Managing Prometheus Instances
- Managing Prometheus Instance Metrics
- Using Prometheus Monitoring to Monitor CCE Cluster Metrics
- Configuring Multi-Account Aggregation for Unified Monitoring
- Configuring Metric Collection Rules for CCE Clusters
- Configuring Recording Rules to Improve Metric Query Efficiency
- Configuring Data Multi-Write to Dump Metrics to Self-Built Prometheus Instances
- Setting Metric Storage Duration
- Monitoring Prometheus Instance Metrics Through Dashboards
- Configuring the Remote Read Address to Enable Self-built Prometheus to Read Data from AOM
- Configuring the Remote Write Address to Report Self-Built Prometheus Data to AOM
- Checking Prometheus Instance Data Through Grafana
- Checking the Number of Metric Samples Reported by Prometheus Instances
- Infrastructure Monitoring
- Application Insights
- O&M Management
- Global Settings
- Querying AOM Traces
- Migrating Data from AOM 1.0 to AOM 2.0
-
Best Practices (2.0)
- AOM Best Practices
- Building a Comprehensive Metric System
- Alarm Noise Reduction
- Unified Metric Monitoring
- Customizing OS Images to Automatically Connect UniAgent
- Connecting Self-Built Middleware in the CCE Container Scenario
- Interconnecting Third-Party/IDC/Huawei Cloud Cross-Region Self-Built Prometheus with AOM Prometheus Instances
-
FAQs (2.0)
- Dashboard
- Alarm Management
- Log Analysis
- Prometheus Monitoring
- Infrastructure Monitoring
- Application Monitoring
-
Collection Management
- Are ICAgent and UniAgent the Same?
- What Can I Do If an ICAgent Is Offline?
- Why Is an Installed ICAgent Displayed as "Abnormal" on the UniAgent Installation and Configuration Page?
- Why Can't I View the ICAgent Status After It Is Installed?
- Why Can't AOM Monitor CPU and Memory Usage After ICAgent Is Installed?
- How Do I Obtain an AK/SK?
- FAQs About UniAgent and ICAgent Installation
- How Do I Enable the Nginx stub_status Module?
- Why Does APM Metric Collection Fail?
- Why Cannot the Installation Script Be Downloaded When I Try to Install UniAgent on an ECS?
- CMDB (Unavailable Soon)
-
O&M Management (Unavailable Soon)
- How Can I Obtain the OBS Permission for Installing Packages?
- Why Can't Scheduled Tasks Be Triggered?
- Can I Specify Script Parameters and Hosts During Job Execution?
- Why Is a Parameter Error Displayed When I Create a Scheduled Task Using a Cron Expression?
- How Can I Set a Review for an Execution Plan?
- Why Is "delete success:{}" Displayed (Files Cannot Be Deleted) During Disk Clearance?
- What Can I Do If the Execution Plan Is Not Updated After I Modify the Job?
- What Can I Do If "agent not found" Is Displayed?
- Why Are the Hosts Listed in Execution Logs Inconsistent with Those I Configured for a Task?
- Why Did a Task Fail to Execute?
- Other FAQs
-
API Reference
- Before You Start
- API Overview
- Calling APIs
-
APIs
-
Alarm
- Querying the Event Alarm Rule List
- Adding an Event Alarm Rule
- Modifying an Event Alarm Rule
- Deleting an Event Alarm Rule
- Querying Events and Alarms
- Counting Events and Alarms
- Reporting Events and Alarms
- Obtaining the Alarm Sending Result
- Deleting a Silence Rule
- Adding a Silence Rule
- Modifying a Silence Rule
- Obtaining the Silence Rule List
- Querying an Alarm Action Rule Based on Rule Name
- Adding an Alarm Action Rule
- Deleting an Alarm Action Rule
- Modifying an Alarm Action Rule
- Querying the Alarm Action Rule List
- Querying Metric or Event Alarm Rules
- Adding or Modifying Metric or Event Alarm Rules
- Deleting Metric or Event Alarm Rules
-
Monitoring
- Querying Time Series Objects
- Querying Time Series Data
- Querying Metrics
- Querying Monitoring Data
- Adding Monitoring Data
- Adding or Modifying One or More Service Discovery Rules
- Deleting a Service Discovery Rule
- Querying Existing Service Discovery Rules
- Adding a Threshold Rule
- Querying the Threshold Rule List
- Modifying a Threshold Rule
- Deleting a Threshold Rule
- Querying a Threshold Rule
- Deleting Threshold Rules in Batches
-
Prometheus Monitoring
- Querying Expression Calculation Results in a Specified Period Using the GET Method
- (Recommended) Querying Expression Calculation Results in a Specified Period Using the POST Method
- Querying the Expression Calculation Result at a Specified Time Point Using the GET Method
- (Recommended) Querying Expression Calculation Results at a Specified Time Point Using the POST Method
- Querying Tag Values
- Obtaining the Tag Name List Using the GET Method
- (Recommended) Obtaining the Tag Name List Using the POST Method
- Querying Metadata
- Log
- Prometheus Instance
- Configuration Management
-
CMDB (AOM 2.0)
- Creating an Application
- Deleting an Application
- Querying the Details of an Application
- Modifying an Application
- Adding a Component
- Deleting a Component
- Querying the Details of a Component
- Modifying a Component
- Creating an Environment
- Deleting an Environment
- Querying the Details of an Environment
- Modifying an Environment
- Querying the Resource List of a Node
- Querying the Details of an Application Based on the Application Name
- Querying the Details of an Environment Based on the Environment Name
- Querying the Details of a Component Based on the Component Name
- Adding a Sub-application
- Deleting a Sub-application
- Modifying a Sub-application
-
Automation (AOM 2.0)
- Creating a Task
- Updating a Task
- Operating a Paused Task
- Obtaining the Execution Details of a Workflow
- Terminating a Task
- Querying a Script
- Querying the Script Version
- Performing Fuzzy Search on the Job Management Page
- Querying Execution Plans (Custom Templates) Based on Job ID
- Querying the Details of an Execution Plan
- Querying Tasks
- Querying the Execution History of a Task
- Executing a Workflow
-
Alarm
- Historical APIs
- Examples
- Permissions Policies and Supported Actions
- Appendix
- SDK Reference
-
Service Overview (1.0)
- What Is AOM?
- Product Architecture
- Functions
- Application Scenarios
- Edition Differences
-
Metric Overview
- Introduction
- Network Metrics and Dimensions
- Disk Metrics and Dimensions
- Disk Partition Metrics
- File System Metrics and Dimensions
- Host Metrics and Dimensions
- Cluster Metrics and Dimensions
- Container Metrics and Dimensions
- VM Metrics and Dimensions
- Instance Metrics and Dimensions
- Service Metrics and Dimensions
- Security
- Restrictions
- Privacy and Sensitive Information Protection Statement
- Relationships Between AOM and Other Services
- Basic Concepts
- Permissions
- Billing
- Change History
- Getting Started (1.0)
-
User Guide (1.0)
- Overview
- Subscribing to AOM
- Permissions Management
- Connecting Resources to AOM
- Monitoring Overview
- Alarm Management
- Resource Monitoring
- Log Management
- Configuration Management
- Resource Groups
- Auditing
- Upgrading to AOM 2.0
- Best Practices (1.0)
-
FAQs (1.0)
- User FAQs
-
Consultation FAQs
- What Is the Billing Policy of AOM?
- What Are the Usage Restrictions of AOM?
- What Are the Differences Between AOM and APM?
- How Do I Distinguish Alarms from Events?
- What Is the Relationship Between the Time Range and Statistical Cycle?
- Does AOM Display Logs in Real Time?
- Will Container Logs Be Deleted After They Are Dumped?
- How Can I Do If I Cannot Receive Any Email Notification After Configuring a Threshold Rule?
- Why Are Connection Channels Required?
-
Usage FAQs
- What Can I Do If I Do Not Have the Permission to Access SMN?
- What Can I Do If Resources Are Not Running Properly?
- How Do I Set the Full-Screen Online Duration?
- What Can I Do If the Log Usage Reaches 90% or Is Full?
- How Do I Obtain an AK/SK?
- How Can I Check Whether a Service Is Available?
- Why Is the Status of an Alarm Rule Displayed as "Insufficient"?
- Why the Status of a Workload that Runs Normally Is Displayed as "Abnormal" on the AOM Page?
- How Do I Create the apm_admin_trust Agency?
- How Do I Obtain the AK/SK by Creating an Agency?
- What Is the Billing Policy of Logs?
- Why Can't I See Any Logs on the Console?
- What Can I Do If an ICAgent Is Offline?
- Why Can't the Host Be Monitored After ICAgent Is Installed?
- Why Is "no crontab for root" Displayed During ICAgent Installation?
- Why Can't I Select an OBS Bucket When Configuring Log Dumping on AOM?
- Why Can't Grafana Display Content?
- Videos
-
More Documents
-
User Guide (1.0) (Kuala Lumpur Region)
-
Service Overview
- What Is AOM?
- Product Architecture
- Functions
- Application Scenarios
-
Metric Overview
- Introduction
- Network Metrics and Dimensions
- Disk Metrics and Dimensions
- Disk Partition Metrics
- File System Metrics and Dimensions
- Host Metrics and Dimensions
- Cluster Metrics and Dimensions
- Container Metrics and Dimensions
- VM Metrics and Dimensions
- Instance Metrics and Dimensions
- Service Metrics and Dimensions
- Restrictions
- Privacy and Sensitive Information Protection Statement
- Relationships Between AOM and Other Services
- Basic Concepts
- Permissions
- Getting Started
- Permissions Management
- Connecting Resources to AOM
- Monitoring Overview
- Alarm Management
- Resource Monitoring
- Log Management
- Configuration Management
- Auditing
- Upgrading to AOM 2.0
-
FAQs
- User FAQs
-
Consultation FAQs
- What Are the Usage Restrictions of AOM?
- What Are the Differences Between AOM and APM?
- How Do I Distinguish Alarms from Events?
- What Is the Relationship Between the Time Range and Statistical Cycle?
- Does AOM Display Logs in Real Time?
- How Can I Do If I Cannot Receive Any Email Notification After Configuring a Threshold Rule?
- Why Are Connection Channels Required?
-
Usage FAQs
- What Can I Do If I Do Not Have the Permission to Access SMN?
- What Can I Do If Resources Are Not Running Properly?
- How Do I Set the Full-Screen Online Duration?
- How Do I Obtain an AK/SK?
- How Can I Check Whether a Service Is Available?
- Why Is the Status of an Alarm Rule Displayed as "Insufficient"?
- Why the Status of a Workload that Runs Normally Is Displayed as "Abnormal" on the AOM Page?
- How Do I Create the apm_admin_trust Agency?
- What Can I Do If an ICAgent Is Offline?
- Why Is "no crontab for root" Displayed During ICAgent Installation?
- Change History
-
Service Overview
-
User Guide (2.0) (Kuala Lumpur Region)
- Service Overview
- Getting Started
- Introduction
- Access Center
- Dashboard
- Alarm Management
-
Metric Analysis
- Metric Browsing
- Prometheus Monitoring
- Resource Usage Statistics
- Log Analysis (Beta)
- Container Insights
- Infrastructure Monitoring
- Process Monitoring
- Collection Management
- Configuration Management
- Remarks
- Permissions Management
- Auditing
- Upgrading to AOM 2.0
-
FAQs
- Overview
- Dashboard
- Alarm Management
- Log Analysis
- Prometheus Monitoring
- Container Insights
- Application Monitoring
-
Collection Management
- Are ICAgent and UniAgent the Same?
- What Can I Do If an ICAgent Is Offline?
- Why Is an Installed ICAgent Displayed as "Abnormal" on the Agent Management Page?
- Why Can't I View the ICAgent Status After It Is Installed?
- Why Can't AOM Monitor CPU and Memory Usage After ICAgent Is Installed?
- How Do I Obtain an AK/SK?
- FAQs About ICAgent Installation
- Other FAQs
- Change History
-
API Reference (Kuala Lumpur Region)
- Before You Start
- API Overview
- Calling APIs
-
APIs
-
Alarm
- Querying the Event Alarm Rule List
- Adding an Event Alarm Rule
- Modifying an Event Alarm Rule
- Deleting an Event Alarm Rule
- Obtaining the Alarm Sending Result
- Deleting a Silence Rule
- Adding a Silence Rule
- Modifying a Silence Rule
- Obtaining the Silence Rule List
- Querying an Alarm Action Rule Based on Rule Name
- Adding an Alarm Action Rule
- Deleting an Alarm Action Rule
- Modifying an Alarm Action Rule
- Querying the Alarm Action Rule List
- Querying Events and Alarms
- Counting Events and Alarms
- Reporting Events and Alarms
-
Monitoring
- Querying Time Series Objects
- Querying Time Series Data
- Querying Metrics
- Querying Monitoring Data
- Adding Monitoring Data
- Adding or Modifying One or More Service Discovery Rules
- Deleting a Service Discovery Rule
- Querying Existing Service Discovery Rules
- Adding a Threshold Rule
- Querying the Threshold Rule List
- Modifying a Threshold Rule
- Deleting a Threshold Rule
- Querying a Threshold Rule
- Deleting Threshold Rules in Batches
- Log
-
Alarm
- Examples
- Permissions Policies and Supported Actions
- Appendix
- Change History
-
User Guide (ME-Abu Dhabi Region)
- Service Overview
- Getting Started
- User Guide
-
FAQs
- What Can I Do If an ICAgent Is Offline?
- Obtaining an AK/SK
- What Is the Relationship Between the Time Range and Statistical Cycle?
- What Can I Do If Resources Are Not Running Properly?
- How Can I Do If I Do Not Have the Permission to Access SMN?
- How Do I Distinguish Alarms and Events?
- Does AOM Display Logs in Real Time?
- How Can I Check Whether a Service Is Available?
- Why Is the Status of an Alarm Rule Displayed as "Insufficient"?
- Why the Status of a Workload that Runs Normally Is Abnormal on the AOM Page?
-
API Reference(ME-Abu Dhabi Region)
- Before You Start
- API Overview
- Calling APIs
-
APIs
-
Monitoring (v1)
- Querying Metrics
- Querying Monitoring Data
- Adding Monitoring Data
- Adding a Threshold Rule
- Modifying a Threshold Rule
- Querying the Threshold Rule List
- Querying a Threshold Rule
- Deleting a Threshold Rule
- Adding or Modifying One or More Application Discovery Rules
- Deleting an Application Discovery Rule
- Querying Application Discovery Rules
- Auto Scaling
- Log
-
Monitoring (v1)
- Permissions Policies and Supported Actions
- Appendix
-
User Guide (Ankara Region)
- Service Overview
- Getting Started
- User Guide
-
FAQs
- What Can I Do If an ICAgent Is Offline?
- How Do I Obtain an AK/SK?
- What Can I Do If Resources Are Not Running Properly?
- How Can I Do If I Do Not Have the Permission to Access SMN?
- How Do I Distinguish Alarms from Events?
- Does AOM Display Logs in Real Time?
- Why Is the Application Status Normal but the Component Status Abnormal?
- Best Practices
- Change History
-
API Reference (Ankara Region)
- Before You Start
- API Overview
- Calling APIs
-
APIs
-
Monitoring (v1)
- Querying Metrics
- Querying Monitoring Data
- Adding Monitoring Data
- Adding a Threshold Rule
- Modifying a Threshold Rule
- Querying the Threshold Rule List
- Querying a Threshold Rule
- Deleting a Threshold Rule
- Adding or Modifying One or More Application Discovery Rules
- Deleting an Application Discovery Rule
- Querying Application Discovery Rules
- Monitoring (v2)
- Auto Scaling
- Log
- Events/Alarms
- Agent
- Application Discovery Rules
-
Prometheus Monitoring
- Querying Expression Calculation Results in a Specified Period
- Querying the Expression Calculation Result at a Specified Time Point
- Querying Tag Values
- Obtaining the Tag Name List
- Querying Metadata
- Querying the Calculation Results of a PromQL Expression in a Specified Period Based on Prometheus Instance
- Querying the Calculation Result of a PromQL Expression at a Specified Time Point Based on Prometheus Instance
- Querying the Values of a Tag Based on Prometheus Instance
- Obtaining the Tag Name List Based on Prometheus Instance
- Querying Metadata Based on Prometheus Instance
-
Monitoring (v1)
- Appendix
- Change History
-
User Guide (1.0) (Kuala Lumpur Region)
- General Reference
Copied.
Connecting Custom Plug-ins to AOM
Create a plug-in, specify the metrics to be reported to AOM using a script, and create a collection task. Then the specified metrics can be reported to AOM for monitoring.
Prerequisites
Creating a Custom Plug-in
You can create a plug-in using a custom script and create a collection task during the connection of the custom plug-in to report metrics to AOM.
- Log in to the AOM 2.0 console.
- In the navigation pane, choose Access > Access Center to go to the old access center. (The new access center does not support the connection of custom plug-ins. Click Back to Old Version in the upper right corner to switch from the new access center to the old one.)
- In the Custom Prometheus Plug-in Access panel, click Custom Plug-in.
- On the displayed page, set related parameters.
- Plug-in information
Table 1 Plug-in parameters Parameter
Description
Plug-in Name
Name of a custom plug-in. Enter a maximum of 32 characters starting with a letter. Only letters, digits, and underscores (_) are allowed.
Plug-in Type
Type of a plug-in. The default value is Custom.
Description
Description of the plug-in to be created. Enter a maximum of 10,000 characters.
- Set Plug-in
Table 2 Plug-in configuration parameters Parameter
Description
Plug-in Version
Version of the custom plug-in.
Plug-in Script
Custom plug-in script. You need to specify the metrics to be reported to AOM in this script. The script type can be Linux or Windows.
Linux: Shell or Python script.
Example:
#!/bin/bash #Examples echo "metric_name{label_name=\"label_value\"} 100"
Windows: BAT script
Example:
::Examples @echo off echo metric_name{label_name="label_value"} 100
Default Script Parameter
Default parameters of the custom plug-in script. Set default parameters for script modeling. You can also leave them empty. Rules:
${Parameter}: Enter a maximum of 64 characters starting with a letter. Only letters, digits, and underscores (_) are allowed. For example, ${a_b}.
You can combine parameters as required and separate them with spaces. Max.: 250 characters.
Script Parameter
Configure the attributes of the default parameters in the custom plug-in script. You can configure the following information as required:
- Mandatory: If this option is enabled, the parameter value in the plug-in debugging area is mandatory. If this option is disabled, the parameter value in the plug-in debugging area is optional.
- Parameter: name of a script parameter. The system automatically identifies the script parameter name based on Default Script Parameter you have already configured. The parameter here is grayed and cannot be configured.
- Default Value: default value of the script parameter.
- Description: description of the parameter.
When you configure a collection task for the custom plug-in, script parameters are displayed based on the script parameter attributes configured here. You can configure collection based on the script parameter attributes.
- Plug-in information
- Click Save.
After a plug-in is created, you can modify it, create a version for it, or delete it.
Table 3 Related operations Operation
Description
Checking the plug-in status
Locate the target plug-in, hover the mouse pointer over the plug-in, and choose
> Version. On the page that is displayed, check the plug-in status.
- Unreleased: When you create a plug-in or create a plug-in version, the plug-in status is Unreleased. You can click the version number to edit the plug-in.
- Released: After you click Release in the Operation column, the plug-in status changes to Released. You can click the version number to view the plug-in details.
Creating a version
Locate the target plug-in, hover the mouse pointer over the plug-in, and choose
> Version. Click Create Version. On the displayed page, set the plug-in information.
Precautions:
- A maximum of five versions can be created for a plug-in.
- If there is only one plug-in version, only Copy is available in the Operation column. If there is more than one plug-in, both Copy and Delete are available in the Operation column. You can click Delete to delete a plug-in version.
Modifying a plug-in
Locate the target plug-in, hover the mouse pointer over the plug-in, and choose
> Modify. On the displayed page, modify the plug-in information.
Deleting a plug-in
Locate the target plug-in, hover the mouse pointer over the plug-in, and choose
> Delete. On the displayed page, click Yes to delete the plug-in.
If a collection task has been configured for a plug-in, deleting the plug-in will also delete the collection task.
Connecting Custom Plug-ins to AOM
- Log in to the AOM 2.0 console.
- In the navigation pane, choose Access > Access Center to go to the old access center. (The new access center does not support the connection of custom plug-ins. Click Back to Old Version in the upper right corner to switch from the new access center to the old one.)
- On the collection task configuration page, set parameters by referring to the following table.
Figure 1 Configuring a collection task
Table 4 Parameters for configuring a collection task Operation
Parameter
Description
Select Instance
Prometheus Instance
Select a Prometheus instance for ECS to store collected data.
A collection task is associated with the Prometheus instance to mark and classify collected data. If no Prometheus instance is available, create one.
Set Plug-in
OS
Operating system of the host. Options: Linux and Windows. For a custom plug-in, the OS is automatically selected.
Collection Plug-in
(Default) Created custom plug-in.
Plug-in Version
Select a plug-in version. Plug-in versions that have not been released are dimmed and cannot be selected.
Set Collection Task
Collection Task Name
Name of a collection task. Enter 1 to 50 characters starting with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed.
Host
Click Add Host. On the Add Host page, select the host for configuring the collection task and installing Exporter.
- Search for and select a host by the host name, IP address, or Agent status.
- You can click
in the upper right corner to deselect the selected host.
- Ensure that the UniAgent of the selected host is running. Otherwise, no data can be collected.
Plug-in Collection Parameters
Set parameters for the custom plug-in script. They come from the default script parameters you define when creating a custom plug-in script.
Advanced Settings
Configure the following parameters:
- Collection Period (s): O&M data collection period, in seconds. Options: 10s, 30s, and 60s (default).
- Timeout Period (s): the maximum time allowed for executing a collection task, in seconds. Options: 10s, 30s, and 60s (default). The timeout period cannot exceed the collection period.
- Executor: user who executes the collection task, that is, the user of the selected host. Default: root. Enter a username. Recommended: root.
- Click Create.
- On the displayed collection task page, click the target collection task to view its details.
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot