Apollo配置更新通知

这篇具有很好参考价值的文章主要介绍了Apollo配置更新通知。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

⚡️: 应领导要求想要把 Apollo 配置变更信息更新到企业微信群中,线上出现异常可根据变更时间,快速反应是否是配置变更导致异常

启用方式

🌛: 前提有一个可正常使用的Apollo服务

配置项统一存储在ApolloPortalDB.ServerConfig表中,也可以通过管理员工具 - 系统参数页面进行配置,修改完一分钟实时生效。

1、webhook.supported.envs

开启 webhook 的环境列表,多个环境以英文逗号分隔,如

DEV,FAT,UAT,PRO

Apollo配置更新通知,运维这些事儿,监控,运维开发,运维,容器,apollo

2、config.release.webhook.service.url

webhook 通知的 url 地址,需要接收 HTTP POST 请求。如有多个地址,以英文逗号分隔,如

http://ip:port/webhook1,http://ip:port/webhook2

Apollo配置更新通知,运维这些事儿,监控,运维开发,运维,容器,apollo

hook编写

🏴: 这里使用的 golang 进行hook编写,拿到信息之后数据格式以 MakeDown 形式发送到企业微信小机器人上,key 根据实际替换

以下是代码展示:

package main

import (
        "bytes"
        "encoding/json"
        "fmt"
        "io"
        "log"
        "net/http"
        "time"
)

const (
        weChatWebhookURL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx-xxx-xxx-xxx"    #
)

type ApolloChange struct {
        AppID          string `json:"appId"`
        NamespaceName  string `json:"namespaceName"`
        Operator       string `json:"operator"`
        ReleaseComment string `json:"releaseComment"`
        Operation      int64  `json:"operation"`
        Time           string `json:"time"`
}

const (
        OperatorNormalRelease  = "0"
        OperatorConfigRollback = "1"
        OperatorGrayRelease    = "2"
        OperatorFullRelease    = "3"
)

func main() {
        fmt.Println("**** 开启apollo配置监听 ****")
        http.HandleFunc("/apollo/webhook", HandleWarning)
        if err := http.ListenAndServe(":8080", nil); err != nil {
                log.Printf("Error listening HTTP: %s", err.Error())
        }
}

func HandleWarning(w http.ResponseWriter, r *http.Request) {
        time.Sleep(time.Second)
        body, err := io.ReadAll(r.Body)
        if err != nil {
                http.Error(w, "Error reading HTTP request", http.StatusBadRequest)
                log.Printf("Error reading HTTP request: %s", err.Error())
                return
        }

        var change ApolloChange
        if err := json.Unmarshal(body, &change); err != nil {
                http.Error(w, "Error parsing JSON", http.StatusBadRequest)
                log.Printf("Error parsing JSON: %s", err.Error())
                return
        }

        apolloType := getApolloType(change.Operator)
        change.Time = time.Now().Format("2006-01-02 15:04:05.000")

        message := fmt.Sprintf("******* <font color=\"info\">【 PRO环境 】Apollo 配置变更通知</font> *******\n"+
                ">项目名: <font color=\"comment\">%s</font>\n"+
                ">配置空间: <font color=\"comment\">%s</font>\n"+
                ">操作人员: <font color=\"comment\">%s</font>\n"+
                ">更新时间: <font color=\"comment\">%s</font>\n"+
                ">更新类型: <font color=\"comment\">%s</font>\n"+
                ">更新内容: <font color=\"comment\">%s</font>",
                change.AppID, change.NamespaceName, change.Operator, change.Time, apolloType, change.ReleaseComment)

        fmt.Println(message)

        payload, err := json.Marshal(map[string]interface{}{
                "msgtype": "markdown",
                "markdown": map[string]interface{}{
                        "content": message,
                },
        })
        if err != nil {
                http.Error(w, "Error creating JSON payload", http.StatusInternalServerError)
                log.Printf("Error creating JSON payload: %s", err.Error())
                return
        }

        resp, err := http.Post(weChatWebhookURL, "application/json", bytes.NewBuffer(payload))
        if err != nil {
                http.Error(w, "Error sending HTTP request", http.StatusInternalServerError)
                log.Printf("Error sending HTTP request: %s", err.Error())
                return
        }
        defer resp.Body.Close()

        if resp.StatusCode == http.StatusOK {
                fmt.Println("Message sent successfully!")
        } else {
                fmt.Println("Error sending message. Status code:", resp.StatusCode)
        }
}

func getApolloType(operator string) string {
        switch operator {
        case OperatorNormalRelease:
                return "正常发布"
        case OperatorConfigRollback:
                return "配置回滚"
        case OperatorGrayRelease:
                return "灰度发布"
        case OperatorFullRelease:
                return "全量发布"
        default:
                return "正常发布"
        }
}

服务部署

本地部署

最简单直接跑在宿主机上,详细操作就不讲解了

容器化部署
构建镜像

Dockerfile如下

FROM golang:1.21.1-alpine3.18 AS builder

COPY . /src
WORKDIR /src

RUN GOPROXY=https://goproxy.cn go build   -o bin/apollo-webhook

FROM alpine:3.18.3

COPY --from=builder /src/bin /app

WORKDIR /app

# 同步时区
RUN apk --update add tzdata && \
	cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
	echo "Asia/Shanghai" > /etc/timezone && apk del tzdata && \
	rm -rf /var/cache/apk/*

EXPOSE 8080

CMD ["./apollo-webhook"]

构建好镜像之后直接使用就好了,可根据自己的方式部署好,把地址 正确填写到 Apollo 的config.release.webhook.service.url

使用

在Apollo更新配置,点击发布时填写对应的Comment信息,发布成功之后数据就会通知到对应的企业微信群中

Apollo配置更新通知,运维这些事儿,监控,运维开发,运维,容器,apollo

样例展示,在企业微信群中能够看到以下内容

Apollo配置更新通知,运维这些事儿,监控,运维开发,运维,容器,apollo文章来源地址https://www.toymoban.com/news/detail-732918.html

到了这里,关于Apollo配置更新通知的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s(健康检查+滚动更新+优雅停机+弹性伸缩+Prometheus监控+配置分离)

    前言 快速配置请直接跳转至汇总配置 K8s + SpringBoot实现零宕机发布:健康检查+滚动更新+优雅停机+弹性伸缩+Prometheus监控+配置分离(镜像复用) 配置 健康检查 业务层面 定义访问端口、路径及权限 application.yaml 将暴露/actuator/health/readiness和/actuator/health/liveness两个接口,访问方

    2024年02月14日
    浏览(42)
  • 安防监控视频云存储EasyCVR平台H.265转码功能更新:新增分辨率配置

    安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储磁盘阵列、

    2024年02月12日
    浏览(41)
  • 使用shell监控应用运行状态通过企业微信接收监控通知

    目的:编写shell脚本来监控应用服务运行状态,若是应用异常则自动重启应用通过企业微信接收监控告警通知 知识要点: 使用shell脚本监控应用服务 使用shell脚本自动恢复异常服务 通过企业微信通知接收监控结果 shell脚本使用数组知识,统计数据元素个数 shell脚本使用变量叠

    2024年02月16日
    浏览(39)
  • 重磅!云智慧监控宝这些功能免费用啦

    马上免费注册使用 自云智慧推出监控宝以来,各行业领域反映强烈,现已有超过24万人次使用监控宝官网的免费试用功能。得益于诸多企业及用户对监控宝热情的持续升温,云智慧释放技术红利,推出监控宝免费使用福利,面向中小型企业提供监控宝核心功能的免费使用,支

    2024年02月11日
    浏览(33)
  • 【开源软件】服务器状态监控通知平台

    声明:   本文仅以学习交流为目的分享自己的开发成果,希望为更多人提供开发设计的思路,还请善待笔者的开发成果。有任何问题欢迎在文章下方留言或私信,也欢迎评论或私信指教,和大家共同进步! 开发语言: C、C++ 开发平台: Linux、Windows 开发工具: Vim、Qt Crea

    2024年02月02日
    浏览(43)
  • 华为云CES监控与飞书通知

    在云服务的日常运维中,持续监控资源状态是保障系统稳定性的关键步骤之一。本文通过一个实际案例展示了如何使用华为云的Go SDK获取负载均衡器的连接数,并通过飞书Webhook发送通知到团队群组,以便运维人员及时获取最新的监控信息。本来准备直接使用ces告警,但是看了

    2024年02月02日
    浏览(38)
  • ThingsBoard教程更新通知,规则节点全解析系列更新

    自从 《ThingsBoard系列教程》 专栏上线,我收到了很多读者的认同和肯定,这是我一直坚持分享的理由之一,做有价值的事,帮助他人。前段时间因为写书和学习的原因,ThingsBoard专栏已经4个月没更新。这就导致一些读者经常催更,有一个读者时常在群里提醒我,有几次还都是

    2023年04月23日
    浏览(40)
  • 安防视频汇聚平台EasyCVR视频监控综合管理平台H.265转码功能更新,新增分辨率配置的具体步骤

    安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储磁盘阵列、

    2024年02月12日
    浏览(61)
  • [运维笔记]内网服务器或设备宕机了怎么及时收到通知并处理

    此前公司内网的一台服务器运行着六七个各种各样的后台任务,还跑着几个客户端。之后有一天晚上,公司里断电了,服务器也就停了,因为不是关键业务,所以之后几天谁也没发现,直到一周后才发现服务器没在处理。 目前的简单办法: 注意:操作系统 Linux,这里我们以

    2024年02月08日
    浏览(56)
  • 如何屏蔽 iOS 17 软件自动更新,去除更新通知和标记

    如何屏蔽 iOS 软件自动更新,去除更新通知和标记 适用于 iOS、iPadOS 和 watchOS,即 iPhone、iPad 和 Apple Watch 通用。 请访问原文链接:https://sysin.org/blog/disable-ios-update/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023.12.25 更新:描述文件暂时过期, 请查看 2.4

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包