使用 Golang 语言编写一个简易的 HTTP 接口,用于接收 EdgeOne CDN 的实时日志。

通过前面的文章可知,其实该接口已经完成几天的时间,只是不想连续有文章发布就拖延到今天。

月初下定决心注册并使用 EdgeOne 内容分发网络(CDN)服务,期间使用的过程中一切都还算是顺利,就是日志服务中遇到了一点难题。其提供的离线日志功能或因未完善信息无法获取到列表,且基于该原因也无法通过调用相对应的 API 接口获取日志列表。

但好在的是当前情况下实时日志功能可以配置一条任务推送日志。

现在的问题就在于 EdgeOne 的实时日志功能当前仅提供“推送至腾讯云 CLS”、“推送至 AWS S3 兼容对象存储”、“推送至 HTTP 服务器”这三种目的地。

针对以上场景诉求,EdgeOne 实时日志服务提供了日志的实时采集与推送的能力,可将您的日志推送到腾讯云日志服务(CLS)或您自建的数据中心内,帮助您自行实现对日志数据的灵活检索与分析。目前 EdgeOne 支持将日志推送到以下目的地:

  1. 推送至腾讯云 CLS:推送至腾讯云提供的一站式日志处理服务(CLS),可用于在 CLS 上进一步对日志做检索分析。
  2. 推送至 AWS S3 兼容对象存储:兼容 AWS Signature V4 鉴权方法的存储桶。
  3. 推送至 HTTP 服务器:通过 HTTP POST 请求将日志推送到指定的后端服务器。

鉴于前不久使用 Fastly CDN 的经验,在使用该 CDN 的实时日志推送时想到的就是“推送至 AWS S3 兼容对象存储”这一目的地,但在使用中不由得发现貌似其不支持 URL 风格的 S3 的说?对此只有选择另外的方式推送实时日志或者是改用主机风格的对象存储服务。至于是选择什么方式就没过多选择,使用“推送至腾讯云 CLS”或是换用“主机风格的对象存储服务”的方式都需要额外的成本支出,最后只好选择“推送至 HTTP 服务器”这一方式了。

对于“推送至 HTTP 服务器”方式的文档当中有 Python 语言的简单实例代码,当我在用 AI 比对一下各语言的性能差异后遂决定选用 Go 语言编写一个接收日志推送的轮子。根据 AI 工具给出的代码进行一波复刻,最终成功实现所需要的简易接口用于接收日志。

使用示例

启动 WEB 接口

  1. 将编译成功后的edgeone-realtime-logs-for-golang程序上传到服务器。
  2. 编辑.env文件:
    TIME_ZONE=Asia/Shanghai # 时区
    
    HTTP_LISTEN=:34567 # HTTP 端口
    HTTP_STATE=1 # 是否监听 HTTP (1,t,T,true,TRUE,True) (0,f,F,false,FALSE,False)
    HTTPS_STATE=0 # 是否监听 HTTPS (1,t,T,true,TRUE,True) (0,f,F,false,FALSE,False)
    HTTPS_LISTEN=:34443 # HTTPS 端口
    CERT_FILE= # HTTPS 证书文件路径
    KEY_FILE= # HTTPS 密钥文件路径
    
    LOG_ROOT=/data/edgeone/logs     # 根目录 例如:/data/logs/json_logs
    Secret_Key=YourKey # SecretKey
    RECEIVE_PATH=/receive # 接收URI,不能为“/”
    
  3. 运行:
    nohup ./edgeone-realtime-logs-for-golang &
    
  4. 验证:
    netstat -antupl|grep edgeone-rea
    

还没研究透使用service托管运行,只好使用nohup暂时实现后台运行吧,就是这样操作暂时没有实现“开机自启”导致系统重启后要再手动操作一遍。

暂时使用固定值Secret_Key进行接口鉴权操作,正常来说应该通过SecretId获取对应的SecretKey来对不同的站点使用不同的密钥鉴权才安全。

在 EdgeOne 配置推送任务

  1. 登陆 EdgeOne 控制台,并进入对应的站点管理。
  2. 在对应的站点页面中,点击【日志服务】列表下的【实时日志】。
  3. 点击【新建推送任务】。
  4. 配置任务
    1. 选择日志源
      1. 任务名字随便填,例如:【logs2http】。
      2. 日志类型:【站点加速日志】。
      3. 服务区域按需选择,例如:【全球可用区(不含中国大陆)】。
      4. 域名按需勾选,例如【全选】。
      5. 点击【下一步】。
    2. 定义推送内容
      1. 预设字段列表:全部勾选,便于收集齐全数据。
      2. 高级配置保持默认。
      3. 点击【下一步】。
    3. 选择目的地
      1. 选择【HTTP 服务(POST)】。
      2. 点击【下一步】。
    4. 目的地信息
      1. 接口地址:http(s)://ip:port(domain)/RECEIVE_PATH
      2. 文件压缩,可以勾选启用【使用 gzip 压缩日志文件】。
      3. 源站鉴权,选择【加密签名】。
      4. SecretId,随便填写,暂时没用到该参数。
      5. SecretKey,软件环境变量固定值,暂时没有使用动态获取。
      6. 高级设置,配置“自定义 HTTP 请求头”用于区分站点:
        • 头部名称:X-Domain
        • 头部值:cyzwb.com
      7. 点击【推送】。
  5. 若是配置正确可以看到推送成功的测试日志。

成功后将会按照规则推送日志到对应的接口。这里为了减少 DNS 解析时间及少一层中转,这里直接使用 ip:port 的方式通信,其中可以使用自签名 SSL 证书。

ChiuYut

2025年08月30日

发布者

ChiuYut

咦?我是谁?这是什么地方? Ya ha!我是ChiuYut!这里是我的小破站!