diff --git a/.vitepress/navbar.ts b/.vitepress/navbar.ts index 08778b8..9464cf7 100644 --- a/.vitepress/navbar.ts +++ b/.vitepress/navbar.ts @@ -21,12 +21,12 @@ export const navbar: DefaultTheme.NavItem[] = [ activeMatch: "^/sdk", items: [ { text: "iOS", link: "/sdk/iossdk/intro" }, - { text: "Android", link: "/sdk/android" }, + { text: "Android", link: "/sdk/android/intro" }, { text: "Javascript", link: "/sdk/jssdk/intro" }, - { text: "Flutter", link: "/sdk/flutter" }, + { text: "Flutter", link: "/sdk/flutter/intro" }, { text: "Uniapp", link: "/sdk/uniapp" }, { text: "微信小程序", link: "/sdk/smallprogram" }, - { text: "HarmonyOS", link: "/sdk/harmonyos" }, + { text: "HarmonyOS", link: "/sdk/harmonyos/intro" }, ], }, { diff --git a/.vitepress/sidebar.ts b/.vitepress/sidebar.ts index 6cf0077..84d2783 100644 --- a/.vitepress/sidebar.ts +++ b/.vitepress/sidebar.ts @@ -103,6 +103,8 @@ export const sidebar: DefaultTheme.Sidebar = { items: [ { text: "WSS 配置", link: "/server/config/wss" }, { text: "认证配置", link: "/server/config/auth" }, + { text: "监控配置", link: "/server/config/monitor" }, + { text: "消息轨迹配置", link: "/server/config/trace" }, ], }, { @@ -124,6 +126,8 @@ export const sidebar: DefaultTheme.Sidebar = { { text: "离线消息说明", link: "/server/advance/offlinemsg" }, { text: "集成到自己系统", link: "/server/advance/integration" }, { text: "WuKongIM 协议", link: "/server/advance/proto" }, + { text: "部署压力测试", link: "/server/advance/stress" }, + // { text: "官方压测报告", link: "/server/advance/stressReport" }, ], }, ], @@ -201,7 +205,6 @@ export const sidebar: DefaultTheme.Sidebar = { { text: "高级功能", link: "/sdk/jssdk/advance" }, ] }, - { text: "Uniapp", link: "/sdk/uniapp" }, { text: "Flutter", collapsed: true, @@ -239,5 +242,6 @@ export const sidebar: DefaultTheme.Sidebar = { { text: "示例代码", link: "https://github.com/WuKongIM/WuKongIMHarmonyOSSDK/tree/main/entry" }, ] }, + { text: "Uniapp", link: "/sdk/uniapp" }, ] }; diff --git a/Dockerfile b/Dockerfile index 6b0ab88..bc7bdc9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,14 @@ -FROM node:18.0.0 as builder +FROM node:20.9.0 as builder WORKDIR /app -RUN curl -o- -L https://yarnpkg.com/install.sh | bash +RUN npm install -g pnpm COPY package.json . -COPY yarn.lock . +COPY pnpm-lock.yaml . # https://registry.npmjs.org/ https://registry.npm.taobao.org # RUN yarn config set registry https://registry.npm.taobao.org -g # RUN yarn config set disturl https://npm.taobao.org/dist -RUN yarn install +RUN pnpm install COPY . . -RUN yarn build +RUN pnpm build FROM nginx:latest COPY --from=builder /app/docker-entrypoint.sh /docker-entrypoint2.sh diff --git a/src/install/docker-compose/multinode.md b/src/install/docker-compose/multinode.md index 311b966..6c2a918 100644 --- a/src/install/docker-compose/multinode.md +++ b/src/install/docker-compose/multinode.md @@ -68,6 +68,10 @@ services: #### 3. 配置负载均衡 +`将以下配置的,10.206.0.10,10.206.0.12,10.206.0.5 三个IM节点的内网地址,分别替换你自己节点1,节点2,节点3的内网ip` + +`将以下配置的119.45.33.109 替换成负载均衡的外网IP` + 在`gateway`节点的安装目录(`~/gateway`)里创建`nginx.conf`文件,内容如下: ```nginx @@ -78,7 +82,10 @@ error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { - worker_connections 1024; + use epoll; # 使用 epoll (Linux) 或 kqueue (BSD),适用于高并发环境 + worker_connections 4096; # 每个 worker 进程最大连接数 + multi_accept on; # 每次接收多个连接 + accept_mutex off; # 禁用 accept_mutex 提高性能 } http { include /etc/nginx/mime.types; @@ -157,8 +164,8 @@ http { proxy_pass http://wukongimws; proxy_redirect off; proxy_http_version 1.1; - # nginx接收upstream server数据超时, 默认120s, 如果连续的120s内没有收到1个字节, 连接关闭 - proxy_read_timeout 120s; + # nginx接收upstream server数据超时, 默认180s, 如果连续的180s内没有收到1个字节, 连接关闭 + proxy_read_timeout 180s; # nginx发送数据至upstream server超时, 默认120s, 如果连续的120s内没有发送1个字节, 连接关闭 proxy_send_timeout 120s; # nginx与upstream server的连接超时时间 @@ -190,6 +197,8 @@ stream { #### 4. 配置监控 +`将以下配置的,10.206.0.10,10.206.0.12,10.206.0.5 三个IM节点的内网地址,分别替换你自己节点1,节点2,节点3的内网ip` + 在`gateway`节点的安装目录(`~/gateway`)里创建`prometheus.yml`文件,内容如下: ```yaml @@ -232,6 +241,9 @@ mkdir ~/wukongim 在`node1`节点上的安装目录(`~/wukongim`)里创建`docker-compose.yml`文件,内容如下: +`在以下配置的,10.206.0.10,10.206.0.12,10.206.0.5分别替换成你节点1,节点2,节点3的内网IP,119.45.33.109替换成你负载均衡的外网IP,10.206.0.2替换成监控的内网地址` + + ```yaml version: '3.7' services: @@ -240,7 +252,7 @@ services: environment: - "WK_MODE=release" # release模式 - "WK_CLUSTER_NODEID=1" # 节点id不能大于等于1024 - - "WK_EXTERNAL_IP=146.56.249.208" # 当前节点外网ip + - "WK_INTRANET_TCPADDR=10.206.0.10:5100" # 内网长连接地址 - "WK_CLUSTER_APIURL=http://10.206.0.10:5001" # 节点内部通信api url地址,这里ip换成自己节点实际的内网ip - "WK_CLUSTER_SERVERADDR=10.206.0.10:11110" # 节点内部通信请求地址 - "WK_EXTERNAL_WSADDR=ws://119.45.33.109:15200" # web端访问的ws长连接地址,这里设置负载均衡的地址即可,这样让负载均衡来分配WuKongIM节点 @@ -269,6 +281,9 @@ services: 在`node2`节点上的安装目录(`~/wukongim`)里创建`docker-compose.yml`文件,内容如下: + +`在以下配置的,10.206.0.10,10.206.0.12,10.206.0.5分别替换成你节点1,节点2,节点3的内网IP,119.45.33.109替换成你负载均衡的外网IP,10.206.0.2替换成监控的内网地址` + ```yaml version: '3.7' services: @@ -277,11 +292,11 @@ services: environment: - "WK_MODE=release" - "WK_CLUSTER_NODEID=2" - - "WK_EXTERNAL_IP=129.211.171.99" - "WK_CLUSTER_APIURL=http://10.206.0.12:5001" - "WK_CLUSTER_SERVERADDR=10.206.0.12:11110" - "WK_EXTERNAL_WSADDR=ws://119.45.33.109:15200" - "WK_EXTERNAL_TCPADDR=119.45.33.109:15100" + - "WK_INTRANET_TCPADDR=10.206.0.12:5100" - "WK_TRACE_PROMETHEUSAPIURL=http://10.206.0.2:9090" - "WK_CLUSTER_INITNODES=1@10.206.0.10 2@10.206.0.12 3@10.206.0.5" # 集群节点列表 healthcheck: @@ -307,6 +322,8 @@ services: 在`node3`节点上的安装目录(`~/wukongim`)里创建`docker-compose.yml`文件,内容如下: +`在以下配置的,10.206.0.10,10.206.0.12,10.206.0.5分别替换成你节点1,节点2,节点3的内网IP,119.45.33.109替换成你负载均衡的外网IP,10.206.0.2替换成监控的内网地址` + ```yaml version: '3.7' services: @@ -315,11 +332,11 @@ services: environment: - "WK_MODE=release" - "WK_CLUSTER_NODEID=3" - - "WK_EXTERNAL_IP=119.45.175.82" - "WK_CLUSTER_APIURL=http://10.206.0.5:5001" - "WK_CLUSTER_SERVERADDR=10.206.0.5:11110" - "WK_EXTERNAL_WSADDR=ws://119.45.33.109:15200" - "WK_EXTERNAL_TCPADDR=119.45.33.109:15100" + - "WK_INTRANET_TCPADDR=10.206.0.5:5100" - "WK_TRACE_PROMETHEUSAPIURL=http://10.206.0.2:9090" - "WK_CLUSTER_INITNODES=1@10.206.0.10 2@10.206.0.12 3@10.206.0.5" healthcheck: diff --git a/src/install/docker-compose/singlenode-scale.md b/src/install/docker-compose/singlenode-scale.md index 4fbdbba..94bcc17 100644 --- a/src/install/docker-compose/singlenode-scale.md +++ b/src/install/docker-compose/singlenode-scale.md @@ -123,7 +123,10 @@ pid /var/run/nginx.pid; events { - worker_connections 1024; + use epoll; # 使用 epoll (Linux) 或 kqueue (BSD),适用于高并发环境 + worker_connections 40960; # 每个 worker 进程最大连接数 + multi_accept on; # 每次接收多个连接 + accept_mutex off; # 禁用 accept_mutex 提高性能 } diff --git a/src/install/linux/multinode-scale.md b/src/install/linux/multinode-scale.md index e5215b8..76dd3a1 100644 --- a/src/install/linux/multinode-scale.md +++ b/src/install/linux/multinode-scale.md @@ -22,11 +22,11 @@ ::: code-group ``` bash [amd64] -curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.5-20240925/wukongim-linux-amd64 +curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.7-20241104/wukongim-linux-amd64 ``` ``` bash [arm64] -curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.5-20240925/wukongim-linux-arm64 +curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.7-20241104/wukongim-linux-arm64 ``` ::: diff --git a/src/install/linux/multinode.md b/src/install/linux/multinode.md index 0b35e85..03123e9 100644 --- a/src/install/linux/multinode.md +++ b/src/install/linux/multinode.md @@ -39,11 +39,11 @@ WuKongIM集群符合 `2n+1` 原则,n表示宕机数量,比如允许1台机 ::: code-group ``` bash [amd64] -curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.5-20240925/wukongim-linux-amd64 +curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.7-20241104/wukongim-linux-amd64 ``` ``` bash [arm64] -curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.5-20240925/wukongim-linux-arm64 +curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.7-20241104/wukongim-linux-arm64 ``` ::: diff --git a/src/install/linux/singlenode.md b/src/install/linux/singlenode.md index d12fc7b..3081180 100644 --- a/src/install/linux/singlenode.md +++ b/src/install/linux/singlenode.md @@ -20,11 +20,11 @@ ::: code-group ``` bash [amd64] -curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.5-20240925/wukongim-linux-amd64 +curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.7-20241104/wukongim-linux-amd64 ``` ``` bash [arm64] -curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.5-20240925/wukongim-linux-arm64 +curl -L -o wukongim https://github.com/WuKongIM/WuKongIM/releases/download/v2.0.7-20241104/wukongim-linux-arm64 ``` ::: diff --git a/src/sdk/android.md b/src/sdk/android.md index db38d7e..f23ed0f 100644 --- a/src/sdk/android.md +++ b/src/sdk/android.md @@ -1501,7 +1501,7 @@ public class WKReminder { public String messageID; // 消息ID public String channelID; // 频道ID public byte channelType; // 频道类型 - public long messageSeq; // 消息序列号(用户唯一,有序) + public long messageSeq; // 消息序列号 public int type; // 提醒类型[1、有人@你][2、群内审核] 等 public int isLocate; // 是否需要进行消息定位 public String text; // 提醒文本 diff --git a/src/sdk/iossdk/conversation.md b/src/sdk/iossdk/conversation.md index 53c3872..d2c4fca 100644 --- a/src/sdk/iossdk/conversation.md +++ b/src/sdk/iossdk/conversation.md @@ -25,21 +25,13 @@ NSArray *conversations = [[WKSDK shared].conversationManager ge WKConversationManagerDelegate说明 ```objc -/** - 当最近会话被新增的时候会调用此方法 - - @param conversation 最近会话对象 - @param left 会话剩余数量 UI层可以判断left == 0 的时候才刷新 避免频繁刷新UI导致卡顿 - */ -- (void)onConversationAdd:(WKConversation*)conversation left:(NSInteger)left; /** 当最近会话对象更新的时候会调用此方法 - @param conversation 最近会话对象 - @param left 会话剩余数量 UI层可以判断left == 0 的时候才刷新 避免频繁刷新UI导致卡顿 + @param conversations 最近会话集合 */ -- (void)onConversationUpdate:(WKConversation*)conversation left:(NSInteger)left; +- (void)onConversationUpdate:(NSArray*)conversations; /** 最近会话未读数发送改变 diff --git a/src/server/advance/addTester.png b/src/server/advance/addTester.png new file mode 100644 index 0000000..ef03fea Binary files /dev/null and b/src/server/advance/addTester.png differ diff --git a/src/server/advance/proto.md b/src/server/advance/proto.md index 9689fca..34c42b2 100644 --- a/src/server/advance/proto.md +++ b/src/server/advance/proto.md @@ -438,7 +438,7 @@ CONNACK 报文由服务端所发送,作为对来自客户端的 CONNECT 报文 Message Seq uint32 - 消息序号(有序递增,用户唯一) + 消息序号(有序递增,频道唯一) Reason Code @@ -634,7 +634,7 @@ CONNACK 报文由服务端所发送,作为对来自客户端的 CONNECT 报文 Message Seq uint32 - 服务端的消息序列号(有序递增,用户唯一) + 服务端的消息序列号(有序递增,频道唯一) diff --git a/src/server/advance/report.png b/src/server/advance/report.png new file mode 100644 index 0000000..b2043b3 Binary files /dev/null and b/src/server/advance/report.png differ diff --git a/src/server/advance/runTester.png b/src/server/advance/runTester.png new file mode 100644 index 0000000..43f5f1d Binary files /dev/null and b/src/server/advance/runTester.png differ diff --git a/src/server/advance/stress.md b/src/server/advance/stress.md new file mode 100644 index 0000000..f011be8 --- /dev/null +++ b/src/server/advance/stress.md @@ -0,0 +1,254 @@ +# 压力测试 + +`WuKongIM压测功能只有大于或等于v2.0.7-20241104的版本才有` + +## 服务器开启压力配置 + +WuKongIM服务新增配置 + + +::: code-group + + +```yaml[wk.yaml] +... +stress: true +intranet: + tcpAddr: "ip:port" +... +``` + +```yaml[environment] +WK_STRESS=true +WK_INTRANET_TCPADDR=ip:port +``` + +::: + + +配置说明: + +`stress` + +> 开启压测配置,只有开启后服务器才能被压测 + +`intranet.tcpAddr` + +> 没配置负载均衡(单机模式):`tcpAddr` 为WuKongIM服务器的内网ip + 5100端口,例如: 192.168.1.12:5100 + +> 配置了负载均衡(分布式模式):`tcpAddr` 为负载均衡的内网ip + 15100端口, 例如:192.168.1.11:15100 + + + +## 安装压测机 + +**配置** + +压测机需要内存比较大的服务器,建议4核16G或以上。 + + +**安装** + +1. 下载执行文件 + +::: code-group + +``` bash [amd64] +sudo curl -L -o wkstress https://github.com/WuKongIM/StressTester/releases/download/v1.0.0/wkstress-linux-amd64 +``` + +``` bash [arm64] +sudo curl -L -o wkstress https://github.com/WuKongIM/StressTester/releases/download/v1.0.0/wkstress-linux-arm64 +``` + +::: + + +2. 修改执行文件权限 + +``` bash +sudo chmod +x wkstress +``` + +**运行** + +```bash +nohup ./wkstress & +``` + +`端口为:9466` + +**停止** + +```bash +kill -9 $(lsof -t -i :9466) +``` + + + +## 开始压测 + +1. 添加压测机器 + +地址为: http://ip:9466 ip为压测机器的`内网ip`,如下图 + +![添加压测机](addTester.png) + +2. 设置压测指标并运行,如下图 + +![运行压测](runTester.png) + + +## 查看压测报告 + +![报告](report.png) + +报告字段解释: + +**测试指标** + +``` +表示当前压测机测试的压测数据。 +``` + +**测试报告** + +``` +运行时长:开始压测的持续时长 +在线人数:模拟的同时在线人数 +离线人数:模拟的在线人数,已经掉线的人数 +发送消息:向服务器发送的消息总数量 +发送速率:向服务器发送消息的当前速率 +发送大小:发送消息的总大小 +发送流量:发送消息的当前带宽实时流量 +发送成功:向服务器发送消息后,收到服务器的响应成功的消息数量 +发送错误:向服务器发送消息后,收到服务器的响应失败的消息数量 +发送最小延迟:发送消息到服务器至收到服务器响应的来回耗时的最小值称为最小延迟 +发送最大延迟:发送消息到服务器至收到服务器响应的来回耗时的最大值称为最大延迟 +发送平均延迟:发送消息到服务器至收到服务器响应的来回耗时的平均值称为平均延迟 +接收消息:收到消息的总数量 +接收速率:收到消息的当前速率 +接收大小:收到消息的总大小 +接收流量:收到消息的当前带宽流量 +接收最小延迟:发送消息到订阅者收到消息的最小耗时称为最小延迟 +接收最大延迟:发送消息到订阅者收到消息的最大耗时称为最大延迟 +接收平均延迟:发送消息到订阅者收到消息的平均耗时称为平均延迟 +``` + +## 报告分析 + +核心指标分析 + +### 发送速率 + +也称之为发送消息并发数 + +描述: + +> 此指标能呈现服务器能同时处理消息的并发能力, 数值越大,服务器的并发能力越强,能同时支持同一秒发送消息的人数越多。 + +根据如下算法,可以大概推算出`发送速率`和`日活用户数(DAU)`的关系 + +``` +峰值并发数=DAU×峰值活跃用户比例×每用户发送速率 +``` +假设: +* 每日活跃用户数(DAU):10万人, +* 峰值在线用户比例:大概是10%~20%。取15% +* 每分钟用户的发送速率 ~= 6条/分钟 = 0.1条/秒 + +则: + +`峰值发消息并发数=100,000×0.15×0.1=1500条/秒` + + 结论: + +`发送速率在1500条/秒左右,大约能支持10万日活用户数。` + +> 通过调整峰值在线用户比例和每用户发送速率大概能推算出自己的峰值发送速率,间接的可以通过压测机来验证服务器是否能达标自己的用户日活要求。 + +### 接收速率 + +也称之为接收消息并发数 + +描述: + +> 此指标能呈现服务器能同时投递消息的能力, 数值越大,服务器的并发能力越强,能同时支持的单聊,群聊数越多。 + +如果是群聊场景或广播场景,一条消息可能会被多个用户接收。因此接收并发数也需要计算: + +``` +峰值接收消息并发数=峰值活跃群数量×每群的平均在线成员数量×每群内的消息发送频率 +``` + +假设: + +* 每日活跃群聊数量:10,000个 +* 每群平均在线成员数量:20人 +* 峰值活跃群数量:大概是10%~20%。取15% +* 每群内的消息发送频率:0.5条/秒 + +则: + +`峰值接收消息并发数=10,000 × 20 × 0.15 x 0.5 = 15,000条/秒` + +结论: + +`消息接收速率在15,000条/秒左右,大约能支持日活1万个每群在线成员数20人的群聊` + +> 通过此公式 + 压测机 + 日活跃群聊数,能压测出需要的服务器资源配置。 + +### 发送成功和错误 + +`发送成功和失败`是指客户端发送消息开始到服务器收到并存储完成后返回给客户端成功与否的结果。 + +`此指标能体现服务器的健康程度,发送成功率越高说明系统越健康。` + + +### 发送和接收平均延迟 + +`此指标能观测出服务器的稳定性` + +平均延迟越小系统越稳定。 + +### 发送成功和期望收到消息数量 + +`此指标能观测有没有漏消息` + +期望收到消息数量,点击接受消息指标旁边的问号就能查看。 + +当停止压测后,再点击查看报告,如果报告里的发送成功消息数等于期望收到消息数量,则表示消息全部被订阅客户端接收到。 + +`注意:此指标只有在 发送消息 = 发送成功,的时候期望收到消息的指标才有意义` + +### 发送流量和接收流量 + +`此指标能观测出服务器需要支持的带宽的大小` + + +## 常见问题 + +1. 长连接上不去,达到几千后,连接数就不再增加了,是什么原因? + +``` + 回答:修改WuKongIM和nginx服务器的文件描述符限制 + + 查看当前文件描述符限制: + +ulimit -n + +临时修改文件描述符限制: + +ulimit -n 100000 + +永久修改文件描述符限制: 编辑 /etc/security/limits.conf 文件,加入以下行: + +* soft nofile 100000 +* hard nofile 100000 + +修改nginx配置里的worker_connections,可以改为40960左右 + + ``` + + + diff --git a/src/server/advance/stressReport.md b/src/server/advance/stressReport.md new file mode 100644 index 0000000..c592b00 --- /dev/null +++ b/src/server/advance/stressReport.md @@ -0,0 +1,77 @@ + +# 压力测试报告 + + +## 测试目标 + +### 稳定性 + +目标描述 + +测试内容 + +期望结果 + +### 可靠性 + + +目标描述 + +测试内容 + +期望结果 + +### 有序性 + + +目标描述 + +测试内容 + +期望结果 + +### 并发量 + + +目标描述 + +测试内容 + +期望结果 + + + +## 部署说明 + +3台16核,16G的Ubuntu服务器,分布式部署WuKongIM + +1台8核,16G的Ubuntu服务器,部署负载均衡(nginx) + +1台8核32G的Ubuntu服务器,部署压测机 + + +## 稳定性测试 + +**测试数据:** + +> 5万人在线 + 1000个200人群 + 1000个单聊,每个群内和单聊1秒钟刷一条消息,持续12小时,观察服务是否稳定。 + +**测试截图:** + +**测试报告截图:** + +**报告结果分析:** + + +## 可靠性测试 + + +## 有序性测试 + + +## 并发测试 + + +## 说明 + +以上测试,均可自行部署压测机进行验证,文档:[部署压测机](stress.html) \ No newline at end of file diff --git a/src/server/api/message.md b/src/server/api/message.md index e2cdfbc..7990092 100644 --- a/src/server/api/message.md +++ b/src/server/api/message.md @@ -134,7 +134,7 @@ start_message_seq=100 end_message_seq=0 limit=10 以limit为准,则返回的me "setting": 0, // 消息设置 消息设置是一个 uint8的数字类型 为1个字节,完全由第三方自定义 比如定义第8位为已读未读回执标记,开启则为0000 0001 = 1 "message_id": 122323343445, // 消息全局唯一ID "client_msg_no": "xxxxx", // 客户端消息编号,可用此字段去重 - "message_seq": 1, // 消息序列号 (用户唯一,有序递增) + "message_seq": 1, // 消息序列号 (频道唯一,有序递增) "from_uid": "xxxx", // 发送者用户id "channel_id": "xxxx", // 频道ID "channel_type": 2, // 频道类型 1.个人频道 2.群频道 @@ -174,7 +174,7 @@ start_message_seq=100 end_message_seq=0 limit=10 以limit为准,则返回的me "setting": 0, // 消息设置 消息设置是一个 uint8的数字类型 为1个字节,完全由第三方自定义 比如定义第8位为已读未读回执标记,开启则为0000 0001 = 1 "message_id": 122323343445, // 消息全局唯一ID "client_msg_no": "xxxxx", // 客户端消息编号,可用此字段去重 - "message_seq": 1, // 消息序列号 (用户唯一,有序递增) + "message_seq": 1, // 消息序列号 (频道唯一,有序递增) "from_uid": "xxxx", // 发送者用户id "channel_id": "xxxx", // 频道ID "channel_type": 2, // 频道类型 1.个人频道 2.群频道 diff --git a/src/server/api/webhook.md b/src/server/api/webhook.md index 20d2e71..eab1b6f 100644 --- a/src/server/api/webhook.md +++ b/src/server/api/webhook.md @@ -45,7 +45,7 @@ body的数据类似为: [uid1-0-1,uid2-1-0] `事件名:msg.offline` -事件数据:消息数组 +事件数据:MessageResp消息对象 ```go @@ -55,7 +55,7 @@ type MessageResp struct { MessageID int64 `json:"message_id"` // 服务端的消息ID(全局唯一) MessageIDStr string `json:"message_idstr"` // 字符串类型服务端的消息ID(全局唯一) ClientMsgNo string `json:"client_msg_no"` // 客户端消息唯一编号 - MessageSeq uint32 `json:"message_seq"` // 消息序列号 (用户唯一,有序递增) + MessageSeq uint32 `json:"message_seq"` // 消息序列号 (频道唯一,有序递增) FromUID string `json:"from_uid"` // 发送者UID ChannelID string `json:"channel_id"` // 频道ID ChannelType uint8 `json:"channel_type"` // 频道类型 @@ -82,7 +82,7 @@ type MessageResp struct { MessageID int64 `json:"message_id"` // 服务端的消息ID(全局唯一) MessageIDStr string `json:"message_idstr"` // 字符串类型服务端的消息ID(全局唯一) ClientMsgNo string `json:"client_msg_no"` // 客户端消息唯一编号 - MessageSeq uint32 `json:"message_seq"` // 消息序列号 (用户唯一,有序递增) + MessageSeq uint32 `json:"message_seq"` // 消息序列号 (频道唯一,有序递增) FromUID string `json:"from_uid"` // 发送者UID ChannelID string `json:"channel_id"` // 频道ID ChannelType uint8 `json:"channel_type"` // 频道类型 diff --git a/src/server/config/config.md b/src/server/config/config.md index 366e220..a2003a0 100644 --- a/src/server/config/config.md +++ b/src/server/config/config.md @@ -10,7 +10,7 @@ ```yaml ## 配置是yaml格式,请严格注意缩进. -mode: "release" # 运行模式 模式 debug 测试 release 正式 bench 压力测试 +mode: "release" # 运行模式 模式 debug 测试 release 正式 addr: "tcp://0.0.0.0:5100" # tcp监听地址 httpAddr: "0.0.0.0:5001" # http api的监听地址 默认:0.0.0.0:5001 rootDir: "./wukongimdata" # 数据存储目录 @@ -21,6 +21,7 @@ wsAddr: "ws://0.0.0.0:5200" # websocket ws 监听地址 wssAddr: "wss://0.0.0.0:5210" # websocket wss 监听地址 如果打开则需要进行 wssConfig相关的证书配置 whitelistOffOfPerson: true # 是否关闭个人白名单 默认为true表示关闭个人白名单的验证 ginMode: "release" # gin框架的模式 debug 调试 release 正式 test 测试 +stress: false # 是否开启压力测试模式 默认为false external: # 公网配置 ip: "" # 节点外网IP,客户端能够访问到的IP地址,如果客户端是内网使用,这里也可以填写内网IP tcpAddr: "" # 默认自动获取, 节点的TCP地址 对外公开,APP端长连接通讯 格式: ip:port diff --git a/src/server/config/monitor.md b/src/server/config/monitor.md new file mode 100644 index 0000000..437d551 --- /dev/null +++ b/src/server/config/monitor.md @@ -0,0 +1,50 @@ +# 监控配置 + +WuKongIM 支持 prometheus 监控,可以通过配置文件或者环境变量来配置 prometheus 的地址。 + + +## `prometheus` 配置 + +在`prometheus` 配置`WuKongIM`的 prometheus 的地址, 例如: + +```yaml + +global: + scrape_interval: 15s + evaluation_interval: 15s +scrape_configs: + - job_name: wukongim1-trace-metrics + static_configs: + - targets: ['node1.example.local:5300'] + labels: + id: "1" + - job_name: wukongim2-trace-metrics + static_configs: + - targets: ['node2.example.local:5300'] + labels: + id: "2" + - job_name: wukongim3-trace-metrics + static_configs: + - targets: ['node3.example.local:5300'] + labels: + id: "3" + +``` + +job_name: 监控名字 建议命名规则为 wukongim[节点Id]-trace-metrics + +targets: `WuKongIM`的 prometheus 监控地址 例如:`xxx.xxx.xxx.xxx:5300` + +labels: id 为节点Id + + +## `WuKongIM` 配置 + +在`WuKongIM`配置文件中配置 prometheus 的地址, 例如: + +```yaml + +trace: # 数据追踪 + prometheusApiUrl: "http://xx.xx.xx.xx:9090" # prometheus的内网地址,用于获取监控数据 + +``` \ No newline at end of file diff --git a/src/server/config/trace.md b/src/server/config/trace.md new file mode 100644 index 0000000..155c307 --- /dev/null +++ b/src/server/config/trace.md @@ -0,0 +1,13 @@ +# 轨迹日志配置 + +消息轨迹是通过收集日志发给`Loki`来分析的,所以需要配置`Loki`的地址 + +```yaml + +logger: + traceOn: true # 开启轨迹日志 + loki: + url: "http://xxx.xxx.xxx.xxx:3100" # loki服务的地址 + +``` +