From fb74453c18ccdb054306c04bcd576e6b80809f75 Mon Sep 17 00:00:00 2001 From: Xinwei Xiong <3293172751@qq.com> Date: Thu, 16 Nov 2023 18:02:30 +0800 Subject: [PATCH] Add Prometheus alerting functionality (#1424) * Code adaptation k8s: service discovery and registration adaptation, configuration adaptation * Initial submission of the help charts script for openim API * change the help charts script * change the help charts script * change helm chart codes * change dockerfiles script * change chart script:add configmap mounts * change chart script:change repository * change chart script:msggateway add one service * change config.yaml * roll back some config values * change chart script:change Ingress rule with a rewrite annotation * add mysql charts scrible * change chart script:add mysql.config.yaml * add nfs provisioner charts * change chart script:add nfs.config.yaml * add ingress-nginx charts * change chart script:add ingress-nginx.config.yaml * add redis &mongodb charts * add kafka&minio charts * change chart script:change redis.values.yaml * change chart script:add redis.config.yaml * change chart script:change redis.config.yaml * change chart script:change mongodb.value.yaml * change chart script:change mongodb.value.yaml * change chart script:add mongodb.config.yaml * change chart script:change minio.values.yaml * change chart script:add minio.config.yaml * change chart script:change kafka.values.yaml * change chart script:add kafka.config.yaml * change chart script:change services.config.yaml * bug fix:Delete websocket's Port restrictions * bug fix:change port value * change chart script:Submit a stable version script * fix bug:Implement option interface * fix bug:change K8sDR.Register * change config.yaml * change chats script:minio service add ingress * change chats script:minio service add ingress * change chats script:kafka.replicaCount=3& change minio.api ingress * delete change chats script * change config.yaml * change openim.yaml * merge go.sum * Add monitoring function and struct for Prometheus on gin and GRPC * Add GRPC and gin server monitoring logic * Add GRPC and gin server monitoring logic2 * Add GRPC and gin server monitoring logic3 * Add GRPC and gin server monitoring logic4 * Add GRPC and gin server monitoring logic5 * Add GRPC and gin server monitoring logic6 * Add GRPC and gin server monitoring logic7 * delete:old monitoring code * add for test * fix bug:change packname * fix bug:delete getPromPort funciton * fix bug:delete getPromPort funciton * fix bug:change logs * fix bug:change registerName logic in GetGrpcCusMetrics function * add getPrometheus url api * fix:config path logic * fix:prometheus enable function * fix:prometheus enable function * fix:transfer Multi process monitoring logic * del:del not using manifest * fix:openim-msgtransfer.sh * fix:openim-msgtransfer.sh * cicd: robot automated Change * delete not using files * add prometheus docker-compose for monitor * fix prometheus.yaml * fix environment.sh * fix init-config.sh * fix init-config.sh * fix env_template.yaml * fix docker-compose.yml * fix docker-compose.yml * add openim_admin_front service * change openim-admin-front * del not using files * add node-exporter-dashaboard.yaml * cicd: robot automated Change * cicd: robot automated Change * feature: add alertmanager function * feature: add alertmanager function * feature: add alertmanager function * feature: add alertmanager function * feature: add alertmanager function * del:delete not using files * del:delete not using files * change:change to personal email info * feat: deployment and design of management backend and monitoring Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: deployment and design of management backend and monitoring Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: deployment and design of management backend and monitoring Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> --------- Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> Co-authored-by: lin.huang Co-authored-by: xuexihuang <1339326187@qq.com> Co-authored-by: xuexihuang Co-authored-by: cubxxw --- .github/workflows/e2e-test.yml | 13 ++- .github/workflows/link-pr.yml | 2 +- README.md | 2 +- config/alertmanager.yml | 32 ++++++ config/email.tmpl | 16 +++ config/instance-down-rules.yml | 11 ++ config/prometheus.yml | 8 +- deployments/templates/alertmanager.yml | 32 ++++++ deployments/templates/env_template.yaml | 13 ++- deployments/templates/prometheus.yml | 8 +- docker-compose.yml | 15 +++ docs/contrib/prometheus-grafana.md | 127 ++++++++++++++++++++---- scripts/init-config.sh | 1 + scripts/install/environment.sh | 29 ++++++ test/e2e/api/user/curd.go | 2 +- test/e2e/framework/config/config.go | 4 +- 16 files changed, 279 insertions(+), 36 deletions(-) create mode 100644 config/alertmanager.yml create mode 100644 config/email.tmpl create mode 100644 config/instance-down-rules.yml create mode 100644 deployments/templates/alertmanager.yml diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml index 535c30f75..b16d614f6 100644 --- a/.github/workflows/e2e-test.yml +++ b/.github/workflows/e2e-test.yml @@ -97,4 +97,15 @@ jobs: - name: Exec OpenIM System uninstall run: | - sudo ./scripts/install/install.sh -u \ No newline at end of file + sudo ./scripts/install/install.sh -u + + - name: gobenchdata publish + uses: bobheadxi/gobenchdata@v1 + with: + PRUNE_COUNT: 30 + GO_TEST_FLAGS: -cpu 1,2 + PUBLISH: true + PUBLISH_BRANCH: gh-pages + env: + GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }} + continue-on-error: true \ No newline at end of file diff --git a/.github/workflows/link-pr.yml b/.github/workflows/link-pr.yml index c61dbe55c..768742eee 100644 --- a/.github/workflows/link-pr.yml +++ b/.github/workflows/link-pr.yml @@ -41,7 +41,7 @@ jobs: # ./*.md all markdown files in the root directory args: --verbose -E -i --no-progress --exclude-path './CHANGELOG' './**/*.md' env: - GITHUB_TOKEN: ${{secrets.GH_PAT}} + GITHUB_TOKEN: ${{secrets.BOT_GITHUB_TOKEN}} - name: Create Issue From File if: env.lychee_exit_code != 0 diff --git a/README.md b/README.md index 722de0240..a2c5fc732 100644 --- a/README.md +++ b/README.md @@ -231,7 +231,7 @@ Before you start, please make sure your changes are in demand. The best for that - [OpenIM Makefile Utilities](https://github.com/openimsdk/open-im-server/tree/main/docs/contrib/util-makefile.md) - [OpenIM Script Utilities](https://github.com/openimsdk/open-im-server/tree/main/docs/contrib/util-scripts.md) - [OpenIM Versioning](https://github.com/openimsdk/open-im-server/tree/main/docs/contrib/version.md) - +- [Manage backend and monitor deployment](https://github.com/openimsdk/open-im-server/tree/main/docs/contrib/prometheus-grafana.md) ## :busts_in_silhouette: Community diff --git a/config/alertmanager.yml b/config/alertmanager.yml new file mode 100644 index 000000000..71cdd2b8f --- /dev/null +++ b/config/alertmanager.yml @@ -0,0 +1,32 @@ +###################### AlertManager Configuration ###################### +# AlertManager configuration using environment variables +# +# Resolve timeout +# SMTP configuration for sending alerts +# Templates for email notifications +# Routing configurations for alerts +# Receiver configurations +global: + resolve_timeout: 5m + smtp_from: alert@openim.io + smtp_smarthost: smtp.163.com:465 + smtp_auth_username: alert@openim.io + smtp_auth_password: YOURAUTHPASSWORD + smtp_require_tls: false + smtp_hello: xxx监控告警 + +templates: + - /etc/alertmanager/email.tmpl + +route: + group_wait: 5s + group_interval: 5s + repeat_interval: 5m + receiver: email +receivers: + - name: email + email_configs: + - to: {EMAIL_TO:-'alert@example.com'} + html: '{{ template "email.to.html" . }}' + headers: { Subject: "[OPENIM-SERVER]Alarm" } + send_resolved: true diff --git a/config/email.tmpl b/config/email.tmpl new file mode 100644 index 000000000..0385601d0 --- /dev/null +++ b/config/email.tmpl @@ -0,0 +1,16 @@ +{{ define "email.to.html" }} +{{ range .Alerts }} + +
+

OpenIM Alert

+

Alert Program: Prometheus Alert

+

Severity Level: {{ .Labels.severity }}

+

Alert Type: {{ .Labels.alertname }}

+

Affected Host: {{ .Labels.instance }}

+

Affected Service: {{ .Labels.job }}

+

Alert Subject: {{ .Annotations.summary }}

+

Trigger Time: {{ .StartsAt.Format "2006-01-02 15:04:05" }}

+
+ +{{ end }} +{{ end }} diff --git a/config/instance-down-rules.yml b/config/instance-down-rules.yml new file mode 100644 index 000000000..72b1f5aa3 --- /dev/null +++ b/config/instance-down-rules.yml @@ -0,0 +1,11 @@ +groups: + - name: instance_down + rules: + - alert: InstanceDown + expr: up == 0 + for: 1m + labels: + severity: critical + annotations: + summary: "Instance {{ $labels.instance }} down" + description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes." \ No newline at end of file diff --git a/config/prometheus.yml b/config/prometheus.yml index 328788d1a..7950c5d33 100644 --- a/config/prometheus.yml +++ b/config/prometheus.yml @@ -6,13 +6,13 @@ global: # Alertmanager configuration alerting: -#alertmanagers: -# - static_configs: -# - targets: ['172.29.166.17:9093'] #alertmanager地址 + alertmanagers: + - static_configs: + - targets: ['172.28.0.1:19093'] # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: -# - "node_down.yml" + - "instance-down-rules.yml" # - "first_rules.yml" # - "second_rules.yml" diff --git a/deployments/templates/alertmanager.yml b/deployments/templates/alertmanager.yml new file mode 100644 index 000000000..95e96571d --- /dev/null +++ b/deployments/templates/alertmanager.yml @@ -0,0 +1,32 @@ +###################### AlertManager Configuration ###################### +# AlertManager configuration using environment variables +# +# Resolve timeout +# SMTP configuration for sending alerts +# Templates for email notifications +# Routing configurations for alerts +# Receiver configurations +global: + resolve_timeout: ${ALERTMANAGER_RESOLVE_TIMEOUT} + smtp_from: ${ALERTMANAGER_SMTP_FROM} + smtp_smarthost: ${ALERTMANAGER_SMTP_SMARTHOST} + smtp_auth_username: ${ALERTMANAGER_SMTP_AUTH_USERNAME} + smtp_auth_password: ${ALERTMANAGER_SMTP_AUTH_PASSWORD} + smtp_require_tls: ${ALERTMANAGER_SMTP_REQUIRE_TLS} + smtp_hello: ${ALERTMANAGER_SMTP_HELLO} + +templates: + - /etc/alertmanager/email.tmpl + +route: + group_wait: 5s + group_interval: 5s + repeat_interval: 5m + receiver: email +receivers: + - name: email + email_configs: + - to: ${ALERTMANAGER_EMAIL_TO} + html: '{{ template "email.to.html" . }}' + headers: { Subject: "[OPENIM-SERVER]Alarm" } + send_resolved: true \ No newline at end of file diff --git a/deployments/templates/env_template.yaml b/deployments/templates/env_template.yaml index 5c8e2628e..398fbb820 100644 --- a/deployments/templates/env_template.yaml +++ b/deployments/templates/env_template.yaml @@ -94,7 +94,7 @@ OPENIM_CHAT_NETWORK_ADDRESS=${OPENIM_CHAT_NETWORK_ADDRESS} # Address or hostname for the Prometheus network. # Default: PROMETHEUS_NETWORK_ADDRESS=172.28.0.11 PROMETHEUS_NETWORK_ADDRESS=${PROMETHEUS_NETWORK_ADDRESS} - + # Address or hostname for the Grafana network. # Default: GRAFANA_NETWORK_ADDRESS=172.28.0.12 GRAFANA_NETWORK_ADDRESS=${GRAFANA_NETWORK_ADDRESS} @@ -106,7 +106,10 @@ NODE_EXPORTER_NETWORK_ADDRESS=${NODE_EXPORTER_NETWORK_ADDRESS} # Address or hostname for the OpenIM admin network. # Default: OPENIM_ADMIN_NETWORK_ADDRESS=172.28.0.14 OPENIM_ADMIN_FRONT_NETWORK_ADDRESS=${OPENIM_ADMIN_FRONT_NETWORK_ADDRESS} - + +# Address or hostname for the alertmanager network. +# Default: ALERT_MANAGER_NETWORK_ADDRESS=172.28.0.15 +ALERT_MANAGER_NETWORK_ADDRESS=${ALERT_MANAGER_NETWORK_ADDRESS} # =============================================== # = Component Extension Configuration = # =============================================== @@ -305,4 +308,8 @@ GRAFANA_PORT=${GRAFANA_PORT} # Port for the admin front. # Default: OPENIM_ADMIN_FRONT_PORT=11002 -OPENIM_ADMIN_FRONT_PORT=${OPENIM_ADMIN_FRONT_PORT} \ No newline at end of file +OPENIM_ADMIN_FRONT_PORT=${OPENIM_ADMIN_FRONT_PORT} + +# Port for the alertmanager. +# Default: ALERT_MANAGER_PORT=19093 +ALERT_MANAGER_PORT=${ALERT_MANAGER_PORT} \ No newline at end of file diff --git a/deployments/templates/prometheus.yml b/deployments/templates/prometheus.yml index 2b67a18ed..fb07a8129 100644 --- a/deployments/templates/prometheus.yml +++ b/deployments/templates/prometheus.yml @@ -6,13 +6,13 @@ global: # Alertmanager configuration alerting: -#alertmanagers: -# - static_configs: -# - targets: ['172.29.166.17:9093'] #alertmanager地址 + alertmanagers: + - static_configs: + - targets: ['${ALERT_MANAGER_ADDRESS}:${ALERT_MANAGER_PORT}'] # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: -# - "node_down.yml" + - "instance-down-rules.yml" # - "first_rules.yml" # - "second_rules.yml" diff --git a/docker-compose.yml b/docker-compose.yml index 6b9dc264d..d51ef7d81 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -162,12 +162,27 @@ services: restart: always volumes: - ./config/prometheus.yml:/etc/prometheus/prometheus.yml + - ./config/instance-down-rules.yml:/etc/prometheus/instance-down-rules.yml ports: - "${PROMETHEUS_PORT}:9090" networks: server: ipv4_address: ${PROMETHEUS_NETWORK_ADDRESS} + alertmanager: + image: prom/alertmanager + container_name: alertmanager + hostname: alertmanager + restart: always + volumes: + - ./config/alertmanager.yml:/etc/alertmanager/alertmanager.yml + - ./config/email.tmpl:/etc/alertmanager/email.tmpl + ports: + - "${ALERT_MANAGER_PORT}:9093" + networks: + server: + ipv4_address: ${ALERT_MANAGER_NETWORK_ADDRESS} + grafana: image: grafana/grafana container_name: grafana diff --git a/docs/contrib/prometheus-grafana.md b/docs/contrib/prometheus-grafana.md index cc75ea97c..349c1b884 100644 --- a/docs/contrib/prometheus-grafana.md +++ b/docs/contrib/prometheus-grafana.md @@ -4,10 +4,37 @@ * 1. [Source Code & Docker](#SourceCodeDocker) * 1.1. [Deployment](#Deployment) * 1.2. [Configuration](#Configuration) + * 1.3. [Monitoring Running in Docker Guide](#MonitoringRunninginDockerGuide) + * 1.3.1. [Introduction](#Introduction) + * 1.3.2. [Prerequisites](#Prerequisites) + * 1.3.3. [Step 1: Clone the Repository](#Step1:ClonetheRepository) + * 1.3.4. [Step 2: Start Docker Compose](#Step2:StartDockerCompose) + * 1.3.5. [Step 3: Use the OpenIM Web Interface](#Step3:UsetheOpenIMWebInterface) + * 1.3.6. [Running Effect](#RunningEffect) + * 1.3.7. [Step 4: Access the Admin Panel](#Step4:AccesstheAdminPanel) + * 1.3.8. [Step 5: Access the Monitoring Interface](#Step5:AccesstheMonitoringInterface) + * 1.3.9. [Next Steps](#NextSteps) + * 1.3.10. [Troubleshooting](#Troubleshooting) * 2. [Kubernetes](#Kubernetes) * 2.1. [Middleware Monitoring](#MiddlewareMonitoring) * 2.2. [Custom OpenIM Metrics](#CustomOpenIMMetrics) * 2.3. [Node Exporter](#NodeExporter) +* 3. [Setting Up and Configuring AlertManager Using Environment Variables and `make init`](#SettingUpandConfiguringAlertManagerUsingEnvironmentVariablesandmakeinit) + * 3.1. [Introduction](#Introduction-1) + * 3.2. [Prerequisites](#Prerequisites-1) + * 3.3. [Configuration Steps](#ConfigurationSteps) + * 3.3.1. [Exporting Environment Variables](#ExportingEnvironmentVariables) + * 3.3.2. [Initializing AlertManager](#InitializingAlertManager) + * 3.3.3. [Key Configuration Fields](#KeyConfigurationFields) + * 3.3.4. [Configuring SMTP Authentication Password](#ConfiguringSMTPAuthenticationPassword) + * 3.3.5. [Useful Links for Common Email Servers](#UsefulLinksforCommonEmailServers) + * 3.4. [Conclusion](#Conclusion) + + + OpenIM offers various flexible deployment options to suit different environments and requirements. Here is a simplified and optimized description of these deployment options: @@ -22,9 +49,9 @@ OpenIM offers various flexible deployment options to suit different environments Next, we will introduce the specific steps, monitoring, and management backend configuration for each of these deployment methods, as well as usage tips to help you choose the most suitable deployment option according to your needs. -## Source Code & Docker +## 1. Source Code & Docker -### Deployment +### 1.1. Deployment OpenIM deploys openim-server and openim-chat from source code, while other components are deployed via Docker. @@ -43,7 +70,7 @@ make init docker compose up -d ``` -### Configuration +### 1.2. Configuration To configure Prometheus data sources in Grafana, follow these steps: @@ -135,18 +162,18 @@ To monitor OpenIM in Grafana, you need to focus on three categories of key metri -### Monitoring Running in Docker Guide +### 1.3. Monitoring Running in Docker Guide -#### Introduction +#### 1.3.1. Introduction This guide provides the steps to run OpenIM using Docker. OpenIM is an open-source instant messaging solution that can be quickly deployed using Docker. For more information, please refer to the [OpenIM Docker GitHub](https://github.com/openimsdk/openim-docker). -#### Prerequisites +#### 1.3.2. Prerequisites + Ensure that Docker and Docker Compose are installed. + Basic understanding of Docker and containerization technology. -#### Step 1: Clone the Repository +#### 1.3.3. Step 1: Clone the Repository First, clone the OpenIM Docker repository: @@ -156,7 +183,7 @@ git clone https://github.com/openimsdk/openim-docker.git Navigate to the repository directory and check the `README` file for more information and configuration options. -#### Step 2: Start Docker Compose +#### 1.3.4. Step 2: Start Docker Compose In the repository directory, run the following command to start the service: @@ -166,17 +193,17 @@ docker-compose up -d This will download the required Docker images and start the OpenIM service. -#### Step 3: Use the OpenIM Web Interface +#### 1.3.5. Step 3: Use the OpenIM Web Interface + Open a browser in private mode and access [OpenIM Web](http://localhost:11001/). + Register two users and try adding friends. + Test sending messages and pictures. -#### Running Effect +#### 1.3.6. Running Effect ![image-20231115100811208](http://sm.nsddd.top/sm202311151008639.png) -#### Step 4: Access the Admin Panel +#### 1.3.7. Step 4: Access the Admin Panel + Access the [OpenIM Admin Panel](http://localhost:11002/). + Log in using the default username and password (`admin1:admin1`). @@ -185,29 +212,29 @@ Running Effect Image: ![image-20231115101039837](http://sm.nsddd.top/sm202311151010116.png) -#### Step 5: Access the Monitoring Interface +#### 1.3.8. Step 5: Access the Monitoring Interface + Log in to the [Monitoring Interface](http://localhost:3000/login) using the credentials (`admin:admin`). -#### Next Steps +#### 1.3.9. Next Steps + Configure and manage the services following the steps provided in the OpenIM source code. + Refer to the `README` file for advanced configuration and management. -#### Troubleshooting +#### 1.3.10. Troubleshooting + If you encounter any issues, please check the documentation on [OpenIM Docker GitHub](https://github.com/openimsdk/openim-docker) or search for related issues in the Issues section. + If the problem persists, you can create an issue on the [openim-docker](https://github.com/openimsdk/openim-docker/issues/new/choose) repository or the [openim-server](https://github.com/openimsdk/open-im-server/issues/new/choose) repository. -## Kubernetes +## 2. Kubernetes Refer to [openimsdk/helm-charts](https://github.com/openimsdk/helm-charts). When deploying and monitoring OpenIM in a Kubernetes environment, you will focus on three main metrics: middleware, custom OpenIM metrics, and Node Exporter. Here are detailed steps and guidelines: -### Middleware Monitoring +### 2.1. Middleware Monitoring Middleware monitoring is crucial to ensure the overall system's stability. Typically, this includes monitoring the following components: @@ -219,16 +246,78 @@ Middleware monitoring is crucial to ensure the overall system's stability. Typic For Kubernetes environments, you can use the corresponding Prometheus Exporters to collect monitoring data for these middleware components. -### Custom OpenIM Metrics +### 2.2. Custom OpenIM Metrics Custom OpenIM metrics provide essential information about the OpenIM application itself, such as user activity, message traffic, system performance, and more. To monitor these metrics in Kubernetes: + Ensure OpenIM application configurations expose Prometheus metrics. + When deploying using Helm charts (refer to [OpenIM Helm Charts](https://github.com/openimsdk/helm-charts)), pay attention to configuring relevant monitoring settings. -### Node Exporter +### 2.3. Node Exporter Node Exporter is used to collect hardware and operating system-level metrics for Kubernetes nodes, such as CPU, memory, disk usage, and more. To integrate Node Exporter in Kubernetes: + Deploy Node Exporter using the appropriate Helm chart. You can find information and guides on [Prometheus Community](https://prometheus.io/docs/guides/node-exporter/). -+ Ensure Node Exporter's data is collected by Prometheus instances within your cluster. \ No newline at end of file ++ Ensure Node Exporter's data is collected by Prometheus instances within your cluster. + + + +## 3. Setting Up and Configuring AlertManager Using Environment Variables and `make init` + +### 3.1. Introduction + +AlertManager, a component of the Prometheus monitoring system, handles alerts sent by client applications such as the Prometheus server. It takes care of deduplicating, grouping, and routing them to the correct receiver. This document outlines how to set up and configure AlertManager using environment variables and the `make init` command. We will focus on configuring key fields like the sender's email, SMTP settings, and SMTP authentication password. + +### 3.2. Prerequisites + ++ Basic knowledge of terminal and command-line operations. ++ AlertManager installed on your system. ++ Access to an SMTP server for sending emails. + +### 3.3. Configuration Steps + +#### 3.3.1. Exporting Environment Variables + +Before initializing AlertManager, you need to set environment variables. These variables are used to configure the AlertManager settings without altering the code. Use the `export` command in your terminal. Here are some key variables you might set: + ++ `export ALERTMANAGER_RESOLVE_TIMEOUT='5m'` ++ `export ALERTMANAGER_SMTP_FROM='alert@example.com'` ++ `export ALERTMANAGER_SMTP_SMARTHOST='smtp.example.com:465'` ++ `export ALERTMANAGER_SMTP_AUTH_USERNAME='alert@example.com'` ++ `export ALERTMANAGER_SMTP_AUTH_PASSWORD='your_password'` ++ `export ALERTMANAGER_SMTP_REQUIRE_TLS='false'` + +#### 3.3.2. Initializing AlertManager + +After setting the necessary environment variables, you can initialize AlertManager by running the `make init` command. This command typically runs a script that prepares AlertManager with the provided configuration. + +#### 3.3.3. Key Configuration Fields + +##### a. Sender's Email (`ALERTMANAGER_SMTP_FROM`) + +This variable sets the email address that will appear as the sender in the notifications sent by AlertManager. + +##### b. SMTP Configuration + ++ **SMTP Server (`ALERTMANAGER_SMTP_SMARTHOST`):** Specifies the address and port of the SMTP server used for sending emails. ++ **SMTP Authentication Username (`ALERTMANAGER_SMTP_AUTH_USERNAME`):** The username for authenticating with the SMTP server. ++ **SMTP Authentication Password (`ALERTMANAGER_SMTP_AUTH_PASSWORD`):** The password for SMTP server authentication. It's crucial to keep this value secure. + +#### 3.3.4. Configuring SMTP Authentication Password + +The SMTP authentication password can be set using the `ALERTMANAGER_SMTP_AUTH_PASSWORD` environment variable. It's recommended to use a secure method to set this variable to avoid exposing sensitive information. For instance, you might read the password from a secure file or a secret management tool. + +#### 3.3.5. Useful Links for Common Email Servers + +For specific configurations related to common email servers, you may refer to their respective documentation: + ++ Gmail SMTP Settings: + + [Gmail SMTP Configuration](https://support.google.com/mail/answer/7126229?hl=en) ++ Microsoft Outlook SMTP Settings: + + [Outlook Email Settings](https://support.microsoft.com/en-us/office/pop-imap-and-smtp-settings-8361e398-8af4-4e97-b147-6c6c4ac95353) ++ Yahoo Mail SMTP Settings: + + [Yahoo SMTP Configuration](https://help.yahoo.com/kb/SLN4724.html) + +### 3.4. Conclusion + +Setting up and configuring AlertManager with environment variables provides a flexible and secure way to manage alert settings. By following the above steps, you can easily configure AlertManager for your monitoring needs. Always ensure to secure sensitive information, especially when dealing with SMTP authentication credentials. \ No newline at end of file diff --git a/scripts/init-config.sh b/scripts/init-config.sh index 99d452d87..a4672c62d 100755 --- a/scripts/init-config.sh +++ b/scripts/init-config.sh @@ -32,6 +32,7 @@ declare -A TEMPLATES=( ["${OPENIM_ROOT}/deployments/templates/env_template.yaml"]="${OPENIM_ROOT}/.env" ["${OPENIM_ROOT}/deployments/templates/openim.yaml"]="${OPENIM_ROOT}/config/config.yaml" ["${OPENIM_ROOT}/deployments/templates/prometheus.yml"]="${OPENIM_ROOT}/config/prometheus.yml" + ["${OPENIM_ROOT}/deployments/templates/alertmanager.yml"]="${OPENIM_ROOT}/config/alertmanager.yml" ) for template in "${!TEMPLATES[@]}"; do diff --git a/scripts/install/environment.sh b/scripts/install/environment.sh index 8198cd460..ed8c18276 100755 --- a/scripts/install/environment.sh +++ b/scripts/install/environment.sh @@ -120,6 +120,8 @@ LAST_OCTET=$((LAST_OCTET + 1)) NODE_EXPORTER_NETWORK_ADDRESS=$(generate_ip) LAST_OCTET=$((LAST_OCTET + 1)) OPENIM_ADMIN_FRONT_NETWORK_ADDRESS=$(generate_ip) +LAST_OCTET=$((LAST_OCTET + 1)) +ALERT_MANAGER_NETWORK_ADDRESS=$(generate_ip) ###################### openim 配置 ###################### # read: https://github.com/openimsdk/open-im-server/blob/main/deployment/README.md def "OPENIM_DATA_DIR" "/data/openim" @@ -259,6 +261,33 @@ def "PROMETHEUS_ADDRESS" "${DOCKER_BRIDGE_GATEWAY}" # Prometheus的地址 ###################### node-exporter 配置 ###################### def "NODE_EXPORTER_PORT" "19100" # node-exporter的端口 def "NODE_EXPORTER_ADDRESS" "${DOCKER_BRIDGE_GATEWAY}" # node-exporter的地址 + +###################### alertmanagerS 配置 ###################### +def "ALERT_MANAGER_PORT" "19093" # node-exporter的端口 +def "ALERT_MANAGER_ADDRESS" "${DOCKER_BRIDGE_GATEWAY}" # node-exporter的地址 + +###################### AlertManager Configuration Script ###################### +# 解析超时 +readonly ALERTMANAGER_RESOLVE_TIMEOUT=${ALERTMANAGER_RESOLVE_TIMEOUT:-'5m'} +# 发件人邮箱 +readonly ALERTMANAGER_SMTP_FROM=${ALERTMANAGER_SMTP_FROM:-'alert@openim.io'} +# SMTP服务器地址和端口 +readonly ALERTMANAGER_SMTP_SMARTHOST=${ALERTMANAGER_SMTP_SMARTHOST:-'smtp.163.com:465'} +# SMTP认证用户名 +readonly ALERTMANAGER_SMTP_AUTH_USERNAME=${SMTP_USERNAME:-"alert@openim.io"} +# SMTP认证密码 +readonly ALERTMANAGER_SMTP_AUTH_PASSWORD=${SMTP_PASSWORD:-"YOURAUTHPASSWORD"} +# SMTP是否需要TLS +readonly ALERTMANAGER_SMTP_REQUIRE_TLS=${ALERTMANAGER_SMTP_REQUIRE_TLS:-"false"} +# SMTP HELO/EHLO标识符 +readonly ALERTMANAGER_SMTP_HELLO=${ALERTMANAGER_SMTP_HELLO:-"xxx监控告警"} +# 邮箱接收人 +readonly ALERTMANAGER_EMAIL_TO=${ALERTMANAGER_EMAIL_TO:-"{EMAIL_TO:-'alert@example.com'}"} +# 邮箱主题 +readonly ALERTMANAGER_EMAIL_SUBJECT=${ALERTMANAGER_EMAIL_SUBJECT:-"{EMAIL_SUBJECT:-'[Alert] Notification'}"} +# 是否发送已解决的告警 +readonly ALERTMANAGER_SEND_RESOLVED=${ALERTMANAGER_SEND_RESOLVED:-"{SEND_RESOLVED:-'true'}"} + ###################### Grafana 配置信息 ###################### def "GRAFANA_PORT" "3000" # Grafana的端口 def "GRAFANA_ADDRESS" "${DOCKER_BRIDGE_GATEWAY}" # Grafana的地址 diff --git a/test/e2e/api/user/curd.go b/test/e2e/api/user/curd.go index 6f9959203..c0380b235 100644 --- a/test/e2e/api/user/curd.go +++ b/test/e2e/api/user/curd.go @@ -52,6 +52,6 @@ func GetUsersOnlineStatus(token string, userIDs []string) error { requestBody := GetUsersOnlineStatusRequest{ UserIDs: userIDs, } - + return sendPostRequestWithToken(url, token, requestBody) } diff --git a/test/e2e/framework/config/config.go b/test/e2e/framework/config/config.go index f790de5f3..ed3c6a258 100644 --- a/test/e2e/framework/config/config.go +++ b/test/e2e/framework/config/config.go @@ -43,8 +43,8 @@ type Config struct { // LoadConfig loads the configurations from environment variables or default values. func LoadConfig() *Config { return &Config{ - APIHost: getEnv("OPENIM_API_HOST", "127.0.0.1"), - APIPort: getEnv("API_OPENIM_PORT", "10002"), + APIHost: getEnv("OPENIM_API_HOST", "127.0.0.1"), + APIPort: getEnv("API_OPENIM_PORT", "10002"), // TODO: Set default variable MsgGatewayHost: getEnv("OPENIM_MSGGATEWAY_HOST", "default-msggateway-host"),