|
| 1 | +--- |
| 2 | +title: 来谈谈日志集中管理方案 - syslog是你的好伙伴.md |
| 3 | +date: 2024-10-13 |
| 4 | +lastmod: 2024-10-13 |
| 5 | +description: 身为一个数码宅, 家里总是会有越来越多的数码设备, 智能化的设备多起来, 总是难免会遇到各种各样的问题, 排查问题的时候日志就很重要了, 对于一些偶发的 case, 比如偶发网络卡顿, 能够看到足够完整清晰的日志, 就很方便了. |
| 6 | +categories: |
| 7 | +- 技术 |
| 8 | +tags: |
| 9 | +- Linux |
| 10 | +- NAS |
| 11 | +- OpenWRT |
| 12 | +- Docker |
| 13 | +--- |
| 14 | + |
| 15 | + |
| 16 | +身为一个数码宅, 家里总是会有越来越多的数码设备, 智能化的设备多起来, 总是难免会遇到各种各样的问题, 排查问题的时候日志就很重要了, 对于一些偶发的 case, 比如偶发网络卡顿, 能够看到足够完整清晰的日志, 就很方便了. |
| 17 | + |
| 18 | +对于一些低功耗设备, 比如路由器, 其磁盘资源很紧张, 日志通常不会保存很久. 这个时候要排查一些偶发的持续时间长的小 bug 就很头痛了. 好在 openwrt 原生就支持将日志通过 syslog 协议发送到远程服务器. 不过看了一圈, 发送是发送过去了, 但是看日志还得命令行一个个看, 要想有个方便的地方看的话就得上 ELK 那一套非常繁琐且吃资源的那一套, 我的需求是这样的: |
| 19 | + |
| 20 | +- 免费,可以持续使用 |
| 21 | +- 能够通过 syslog 协议收集日志 |
| 22 | +- 能够自部署最佳, 但是不希望是 ELK 那种繁琐且非常消耗资源的 |
| 23 | +- 有个 web 界面能方便的查找日志 |
| 24 | +- 能够配置监控, 那样的话如果设备有 fatal 日志我可以立即知道 |
| 25 | + |
| 26 | +搜寻了一番, 发现有个 datalust 公司出的 seq 看起来挺不错, 在自己服务器上部署了一套, 完美符合我的需求, 分享一下. |
| 27 | + |
| 28 | +seq 不仅支持 syslog, 还支持程序主动上报、采集容器日志等很多功能, 这里只主要围绕 syslog, 收集各种终端设备日志做介绍 |
| 29 | + |
| 30 | + |
| 31 | + |
| 32 | + |
| 33 | + |
| 34 | +## 安装: 通过 docker compose 部署 seq |
| 35 | + |
| 36 | +首先生成下默认密码, 这里需要通过程序自身的指令生成明文密码对应的密文才行. 比如我这里指定初始密码的明文为`initP@ss`, 运行这个指令, 就会输出对应的密文, 这个待会部署的时候需要使用 |
| 37 | + |
| 38 | +```bash |
| 39 | +➜ echo 'initP@ss' | sudo docker run --rm -i datalust/seq config hash |
| 40 | + |
| 41 | + |
| 42 | +QE6k2bZLWkh7BwWYRNsG3h9sZPcLskSLKJGii4mvU0rsDyN0/UqW1TwEZp43O09wvOCjbOgswZxHX7FeNo05cfiv3KkB8/q/Msj8nlXL4TGd |
| 43 | +``` |
| 44 | + |
| 45 | +之后通过 docker compose 进行部署, 下面为 compose 文件示例 |
| 46 | + |
| 47 | +```yaml |
| 48 | +services: |
| 49 | + seq-input-syslog: |
| 50 | + image: datalust/seq-input-syslog:latest |
| 51 | + container_name: seq_syslog_input |
| 52 | + depends_on: |
| 53 | + - seq |
| 54 | + ports: |
| 55 | + - "20014:514/udp" # 接收 syslog 协议请求的端口, 这里配置的是20014, 可以自定义, 后面需要用到 |
| 56 | + environment: |
| 57 | + SEQ_ADDRESS: "http://seq:5341" # 要转发到主程序进行处理, 端口为默认的5341, 不用改 |
| 58 | + restart: unless-stopped |
| 59 | + |
| 60 | + seq: |
| 61 | + image: datalust/seq:latest |
| 62 | + container_name: seq_log |
| 63 | + ports: |
| 64 | + - "20054:80" # web ui |
| 65 | + environment: |
| 66 | + ACCEPT_EULA: Y |
| 67 | + SEQ_FIRSTRUN_ADMINPASSWORDHASH: QE6k2bZLWkh7BwWYRNsG3h9sZPcLskSLKJGii4mvU0rsDyN0/UqW1TwEZp43O09wvOCjbOgswZxHX7FeNo05cfiv3KkB8/q/Msj8nlXL4TGd # 这里填写刚生成的密文 |
| 68 | + restart: unless-stopped |
| 69 | + volumes: |
| 70 | + - /data/seq-data:/data |
| 71 | +``` |
| 72 | +
|
| 73 | +之后执行 sudo docker compose up -d , 顺利的话, 在配置的 web ui 端口, 就可以看到管理台了. 默认账户为 admin, 密码为刚才设置的密码的原始明文. |
| 74 | +
|
| 75 | +## 使用: syslog 配置 |
| 76 | +
|
| 77 | +基本上所有 Linux-base 系统都支持将系统日志通过 syslog 协议发送到远端服务器. 我手头主要的 openwrt 路由器、运行 truenas 系统的 nas、树莓派上跑的 debian, 以及其他 linux 云服务器都可以无缝接入, 这里简单介绍下 |
| 78 | +
|
| 79 | +### openwrt 配置远程 log |
| 80 | +
|
| 81 | +在 system -> system 菜单下, 有个 logging 的 tab, 里面配置好服务器 ip、端口就可以使用了. 协议记得选 udp |
| 82 | +
|
| 83 | + |
| 84 | +
|
| 85 | +### truenas 配置远程 log |
| 86 | +
|
| 87 | +在 system setting -> advaned -> syslog 菜单下, 配置远程服务器地址和端口, 协议选择 udp, 保存就可以了 |
| 88 | +
|
| 89 | + |
| 90 | +
|
| 91 | +### linux 服务器配置远程 log |
| 92 | +
|
| 93 | +大多数 Linux 发行版已经预装了 rsyslog。可以通过以下命令检查是否已安装: |
| 94 | +`rsyslogd -version` |
| 95 | +如果未安装,可以使用以下命令安装: |
| 96 | + |
| 97 | +```bash |
| 98 | +# Debian/Ubuntu: |
| 99 | +sudo apt update |
| 100 | +sudo apt install rsyslog |
| 101 | +
|
| 102 | +# CentOS/RHEL: |
| 103 | +sudo yum install rsyslog |
| 104 | +``` |
| 105 | + |
| 106 | +步骤 2:配置客户端的 rsyslog |
| 107 | +编辑 rsyslog 配置文件: 打开配置文件进行编辑,通常位于 `/etc/rsyslog.conf` 或 `/etc/rsyslog.d/` 目录下。 |
| 108 | + |
| 109 | +```bash |
| 110 | +sudo nano /etc/rsyslog.conf |
| 111 | +``` |
| 112 | + |
| 113 | +添加远程服务器配置: 在文件末尾,添加以下行以指定远程服务器的 IP 地址和端口(默认是 UDP 514 或 TCP 514): |
| 114 | + |
| 115 | +```conf |
| 116 | +*.* @remote-server-ip:514 # 使用 UDP |
| 117 | +*.* @@remote-server-ip:514 # 使用 TCP |
| 118 | +``` |
| 119 | + |
| 120 | +这里我们需要使用 udp 协议的. |
| 121 | +将 remote-server-ip 替换为远程 Syslog 服务器的实际 IP 地址或者域名, 保存并关闭文件。 |
| 122 | + |
| 123 | +比如 |
| 124 | + |
| 125 | +```conf |
| 126 | +*.* @syslog.myserver.com:20014 |
| 127 | +``` |
| 128 | + |
| 129 | +步骤 3:重启 rsyslog 服务 |
| 130 | +在进行更改后,重启 rsyslog 服务以应用新配置: |
| 131 | + |
| 132 | +```bash |
| 133 | +sudo systemctl restart rsyslog |
| 134 | +``` |
| 135 | + |
| 136 | +## 其他配置 |
| 137 | + |
| 138 | +### 配置日志定期清理 |
| 139 | + |
| 140 | +默认情况下, 是没有配置日志清理规则的, 时间一长服务器硬盘可能直接满了, 所以这里一定不要忘记配置自动清理. 在菜单里的 retention 可以配置过多少天删除 |
| 141 | + |
| 142 | + |
| 143 | + |
| 144 | + |
| 145 | + |
| 146 | +### 配置告警通知 |
| 147 | + |
| 148 | +各种通知渠道的支持是通过插件形式提供的, 在 设置里可以自行安装. 可以支持 email、http webhook, 钉钉机器人、telegram 机器人等多种渠道. |
| 149 | + |
| 150 | +[插件市场链接](https://www.nuget.org/packages?q=Tags%3A%22seq-app%22) |
| 151 | + |
| 152 | +--- |
0 commit comments