1. 为什么使用vector
我的自托管服务器使用UNRAID系统。本身的日志信息存储在内存中,发生意外宕机的情况就无法追溯日志了。
但是它提供了对接外部syslog服务器的功能。于是便打算将日志推送到远程服务器
2. 实施方案
- 由于UNRAID 自带的syslog 远程服务器配置,只支持简单的 ip(url) 和 port 配置。而云平台上传日志基本都需要鉴权,所以无法直接上传日志到云平台
- 使用 VECTOR (一款轻量级、超快速的用于构建可观测性管道的工具) 进行数据接受,并进行转发
- 云日志平台的选择。在vector支持的平台中,papertrail 和 better stack 提供的免费服务额度比较好用
- 云日志平台的免费服务基本只提供2-7天的日志存储,所以可以在转发一份日志到S3平台

3. vector 部署
vector可以自托管部署,可以部署在自己的服务器上,也可以使用railway的免费容器服务进行部署。
部署在自己的服务器上比较简单,直接使用官方的docker镜像进行部署就好了。
我这边提供下部署在railway上的方案。
3.1 新建GitHub项目
新建一个github项目。项目内容如下
rsyslog-railway/
├── Dockerfile
└── vector.yaml
Dockerfile
1 2 3 4 5 6 7 8 9 10 11
| FROM timberio/vector:0.35.0-debian
COPY vector.yaml /etc/vector/vector.yaml
EXPOSE 514/udp 514/tcp
ENTRYPOINT ["vector"] CMD ["--config", "/etc/vector/vector.yaml"]
|
vector.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| ---
sources: syslog_udp: type: syslog address: "0.0.0.0:${PORT:-514}" mode: udp max_length: 8192 syslog_tcp: type: syslog address: "0.0.0.0:${PORT_TCP:-514}" mode: tcp max_connections: 100
sinks: solarwinds: type: http inputs: - syslog_udp - syslog_tcp method: post uri: "https://yourpapertrailurl/v1/logs" auth: strategy: bearer token: "${SWO_TOKEN}" encoding: codec: json headers: Content-Type: "application/json" batch: max_events: 100 timeout_secs: 10
betterstack: type: http inputs: - syslog_udp - syslog_tcp method: post uri: "${BETTERSTACK_URL}" auth: strategy: bearer token: "${BETTERSTACK_TOKEN}" encoding: codec: json timestamp_format: rfc3339 headers: Content-Type: "application/json" batch: max_events: 100 timeout_secs: 10
s3: type: aws_s3 inputs: - syslog_udp - syslog_tcp bucket: "yourbucket" region: "${AWS_REGION:-us-east-1}" endpoint: "https://yourendpoint" auth: access_key_id: "${AWS_ACCESS_KEY_ID}" secret_access_key: "${AWS_SECRET_ACCESS_KEY}" encoding: codec: json timestamp_format: rfc3339 compression: none key_prefix: "syslog/%Y/%m/" filename_time_format: "%d-%H:%M:%S" filename_append_uuid: true filename_extension: "json" batch: max_events: 1000 timeout_secs: 3600
|
3.2 在railway 部署项目
在railway新建项目。选择 github 仓库,然后选择你刚才创建的github项目

配置变量

配置端口
在setting -> networking -> tcpProxy 中配置代理 514 端口

3.3 uptimerobot防止项目休眠
railway的免费服务,在运行10分钟后,如果没有请求会自动休眠。
所以可以使用 uptimerobot 设置每5分钟进行一次请求,从而保证项目一直运行

4. 最终效果
云平台日志提供实时搜索和额外的告警功能。s3 存储提供永久文件保存
