You need to enable JavaScript to run this app.
文档中心
日志服务

日志服务

复制全文
下载 pdf
数据采集
使用 Syslog 协议上传日志
复制全文
下载 pdf
使用 Syslog 协议上传日志
本文介绍如何通过 Syslog 协议上传日志到日志服务。​
说明​
该功能仅支持华北2(北京)、华东2(上海)地域。​
背景信息​
‌Syslog‌ 是一种标准化的日志传递协议,主要用于收集、转发和存储系统日志,支持 UDP 和 TCP 等传输协议,但传统实现功能相对基础,例如在 Linux 系统中常作为默认日志服务运行。‌​
日志服务支持使用 SYSLOG-NG 工具,通过配置syslog-ng.conf文件,将 Syslog 日志上传到日志服务,使用日志服务的检索分析、加工、消费、投递、监控告警、可视化等功能,实现业务运维监控、数据统计分析等场景。​
限制说明​
  • Syslog 协议需为标准 RFC 5424 协议。​
  • 时间精度仅支持到毫秒级。​
前提条件​
  • 已安装 SYSLOG-NG。​
  • 已创建日志项目和日志主题。如需检索分析日志,还需为日志主题配置索引。​
  • 已创建 IAM 角色,获取 Access Key ID、Secret Access Key。并为用户授予日志主题TLSFullAccess权限,详情可参考IAM 概述。​
配置步骤​
  1. 创建如下脚本并运行,获取日志服务AUTHORIZATION。​
其中self.region、self.ak、self.sk请替换为实际环境的Region、Access Key ID、Secret Access Key。​
  • ​
    import hashlib​
    import hmac​
    import base64​
    ​
    ​
    class Util:​
    @staticmethod​
    def hmac(key, string):​
    return hmac.new(key, string.encode('utf-8'), hashlib.sha256).digest()​
    ​
    @staticmethod​
    def sha256(data):​
    return hashlib.sha256(data.encode('utf-8')).digest()​
    ​
    ​
    class tlsSigners:​
    def __init__(self,ak,sk):​
    self.service_name = "TLS"​
    self.region = "cn-beijing"​
    self.algorithm = "HMAC-SHA256"​
    self.v4Identifier = "request"​
    self.ak = ak​
    self.sk = sk​
    self.body = "{}"​
    self.path = "/adapter/"​
    self.method = "POST"​
    self.query = ""​
    self.datetime = "20250101T000000Z"​
    self.request = {"headers": ["x-content-sha256","x-date"]}​
    ​
    def authorization(self):​
    cred_string = self.create_scope()​
    parts = [​
    f"HMAC-SHA256 Credential={self.ak}/{cred_string}",​
    f"SignedHeaders={self.signed_headers()}",​
    f"Signature={self.signature()}"​
    ]​
    token = ', '.join(parts)​
    return token​
    ​
    def signature(self):​
    signing_key = self.get_signing_key()​
    sign_str = self.get_sign_str()​
    return Util.hmac(signing_key,sign_str).hex()​
    ​
    ​
    def get_signing_key(self):​
    k_date = Util.hmac(f"{self.sk}".encode('utf-8'),self.datetime[:8])​
    region = self.region​
    k_region = Util.hmac(k_date,region)​
    k_service = Util.hmac(k_region,self.service_name)​
    sign_key = Util.hmac(k_service,self.v4Identifier)​
    return sign_key​
    ​
    ​
    def get_sign_str(self):​
    parts = [​
    self.algorithm,​
    self.datetime,​
    self.create_scope(),​
    Util.sha256(self.get_canonical_string()).hex()​
    ]​
    return '\n'.join(parts)​
    ​
    def get_canonical_string(self):​
    parts = [​
    self.method,​
    self.path,​
    self.query,​
    "x-content-sha256:"+Util.sha256(self.body).hex(),​
    "x-date:" + self.datetime,​
    "",​
    self.request["headers"][0]+";"+self.request["headers"][1],​
    Util.sha256(self.body).hex(),​
    ]​
    return '\n'.join(parts)​
    ​
    def signed_headers(self):​
    headers = sorted(k.lower() for k in self.request['headers'])​
    return ';'.join(headers)​
    ​
    def create_scope(self):​
    return '/'.join( [self.datetime[0:8], self.region, self.service_name, self.v4Identifier])​
    ​
    ​
    if __name__ == '__main__':​
    t = tlsSigners("your_ak","your_sk")​
    print(t.authorization())​
    ​
  1. 配置 SYSLOG-NG 的syslog-ng.conf文件(通常位于/etc/syslog-ng/目录下)。​
  • 其中部分参数请替换为实际环境的值:​
  • {AUTHORIZATION}:替换为上一步获取的 AUTHORIZATION 值。​
  • {TLS_ENDPOINT}:替换为日志服务的 ENDPOINT,详情可参考服务地址。​
  • {TOPIC_ID}:替换为日志服务中的日志主题 ID。​
  • ​
    # 数据源定义​
    source s_network {​
    default-network-drivers(​
    flags(syslog-protocol)​
    );​
    };​
    ​
    # 目的端,tls服务​
    destination d_http {​
    http(​
    url("https://{TLS_ENDPOINT}:10009/PutSysLogs?TopicId={TOPIC_ID}") ​
    headers(​
    "Content-Type:text/plain",​
    "Authorization:{AUTHORIZATION}"​
    )​
    content-compression("gzip")​
    accept-encoding("all")​
    body("<${PRI}>1 ${ISODATE:--} ${HOST:--} ${PROGRAM:--} ${PID:--} ${MSGID:--} ${SDATA:--} ${MESSAGE}")​
    batch-bytes(65536) # 单个请求的发送的消息数据大小​
    batch-timeout(1000) # 批次最大等待时间​
    );​
    };​
    ​
    # 数据转发配置​
    log { ​
    source(s_network);​
    destination(d_http);​
    };​
    ​
  1. 重启 SYSLOG-NG。​
  • ​
    sudo /etc/init.d/syslog-ng restart​
    ​
说明​
执行 sudo service syslog-ng restart 或 sudo systemctl restart syslog-ng 也可以重启 SYSLOG-NG。​
  1. 在 SYSLOG-NG 容器环境生成测试日志。​
  • ​
    # -n 表示预期发送的最多消息数,实际发送会小于这个数据​
    loggen -i -S -P localhost 601 -n 10000​
    ​
  • ​​​
  1. 登录日志服务控制台,查看日志。​
  1. 在顶部导航栏中,选择日志服务所在的地域。​
  1. 在左侧导航栏中,选择常用功能 > 检索分析。​
  1. 在检索分析页面的左侧列表中,选择指定的日志项目和日志主题。​
  1. 在指定日志主题的检索分析页面,指定时间范围。​
  • 时间范围默认为 5 分钟,您也可以自定义检索的时间范围。日志数据的存储时间不在指定的查询时间范围内时,该数据不会被检索到。​
  1. 在输入框中输入检索分析语句,并单击搜索。详情可参考分析日志。​
  • ​​​
​
最近更新时间:2026.10.19 17:52:10
这个页面对您有帮助吗?
有用
有用
无用
无用