<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OpenWRT on Colinx Blog</title><link>/tags/openwrt/</link><description>Recent content in OpenWRT on Colinx Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 13 Oct 2024 00:00:00 +0000</lastBuildDate><atom:link href="/tags/openwrt/index.xml" rel="self" type="application/rss+xml"/><item><title>来谈谈日志集中管理方案 - syslog 是你的好伙伴</title><link>/posts/%E6%9D%A5%E8%B0%88%E8%B0%88%E6%97%A5%E5%BF%97%E9%9B%86%E4%B8%AD%E7%AE%A1%E7%90%86%E6%96%B9%E6%A1%88-syslog%E6%98%AF%E4%BD%A0%E7%9A%84%E5%A5%BD%E4%BC%99%E4%BC%B4/</link><pubDate>Sun, 13 Oct 2024 00:00:00 +0000</pubDate><guid>/posts/%E6%9D%A5%E8%B0%88%E8%B0%88%E6%97%A5%E5%BF%97%E9%9B%86%E4%B8%AD%E7%AE%A1%E7%90%86%E6%96%B9%E6%A1%88-syslog%E6%98%AF%E4%BD%A0%E7%9A%84%E5%A5%BD%E4%BC%99%E4%BC%B4/</guid><description>
&lt;p>身为一个数码宅，家里总是会有越来越多的数码设备，智能化的设备多起来，总是难免会遇到各种各样的问题，排查问题的时候日志就很重要了，对于一些偶发的 case, 比如偶发网络卡顿，能够看到足够完整清晰的日志，就很方便了。&lt;/p>
&lt;p>对于一些低功耗设备，比如路由器，其磁盘资源很紧张，日志通常不会保存很久。这个时候要排查一些偶发的持续时间长的小 bug 就很头痛了。好在 openwrt 原生就支持将日志通过 syslog 协议发送到远程服务器。不过看了一圈，发送是发送过去了，但是看日志还得命令行一个个看，要想有个方便的地方看的话就得上 ELK 那一套非常繁琐且吃资源的那一套，我的需求是这样的：&lt;/p>
&lt;ul>
&lt;li>免费，可以持续使用&lt;/li>
&lt;li>能够通过 syslog 协议收集日志&lt;/li>
&lt;li>能够自部署最佳，但是不希望是 ELK 那种繁琐且非常消耗资源的&lt;/li>
&lt;li>有个 web 界面能方便的查找日志&lt;/li>
&lt;li>能够配置监控，那样的话如果设备有 fatal 日志我可以立即知道&lt;/li>
&lt;/ul>
&lt;p>搜寻了一番，发现有个 datalust 公司出的 seq 看起来挺不错，在自己服务器上部署了一套，完美符合我的需求，分享一下。&lt;/p>
&lt;p>seq 不仅支持 syslog, 还支持程序主动上报、采集容器日志等很多功能，这里只主要围绕 syslog, 收集各种终端设备日志做介绍&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128864.png" alt="Pasted image 20241013170403">&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128865.png" alt="Pasted image 20241013170340">&lt;/p>
&lt;h2 id="安装通过-docker-compose-部署-seq">
安装：通过 docker compose 部署 seq
&lt;a href="#%e5%ae%89%e8%a3%85%e9%80%9a%e8%bf%87-docker-compose-%e9%83%a8%e7%bd%b2-seq" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>首先生成下默认密码，这里需要通过程序自身的指令生成明文密码对应的密文才行。比如我这里指定初始密码的明文为&lt;code>initP@ss&lt;/code>, 运行这个指令，就会输出对应的密文，这个待会部署的时候需要使用&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">➜ echo &lt;span style="color:#e6db74">&amp;#39;initP@ss&amp;#39;&lt;/span> | sudo docker run --rm -i datalust/seq config hash
QE6k2bZLWkh7BwWYRNsG3h9sZPcLskSLKJGii4mvU0rsDyN0/UqW1TwEZp43O09wvOCjbOgswZxHX7FeNo05cfiv3KkB8/q/Msj8nlXL4TGd
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后通过 docker compose 进行部署，下面为 compose 文件示例&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#f92672">services&lt;/span>:
&lt;span style="color:#f92672">seq-input-syslog&lt;/span>:
&lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">datalust/seq-input-syslog:latest&lt;/span>
&lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">seq_syslog_input&lt;/span>
&lt;span style="color:#f92672">depends_on&lt;/span>:
- &lt;span style="color:#ae81ff">seq&lt;/span>
&lt;span style="color:#f92672">ports&lt;/span>:
- &lt;span style="color:#e6db74">&amp;#34;20014:514/udp&amp;#34;&lt;/span> &lt;span style="color:#75715e"># 接收 syslog 协议请求的端口，这里配置的是 20014, 可以自定义，后面需要用到&lt;/span>
&lt;span style="color:#f92672">environment&lt;/span>:
&lt;span style="color:#f92672">SEQ_ADDRESS&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;http://seq:5341&amp;#34;&lt;/span> &lt;span style="color:#75715e"># 要转发到主程序进行处理，端口为默认的 5341, 不用改&lt;/span>
&lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">unless-stopped&lt;/span>
&lt;span style="color:#f92672">seq&lt;/span>:
&lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">datalust/seq:latest&lt;/span>
&lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">seq_log&lt;/span>
&lt;span style="color:#f92672">ports&lt;/span>:
- &lt;span style="color:#e6db74">&amp;#34;20054:80&amp;#34;&lt;/span> &lt;span style="color:#75715e"># web ui&lt;/span>
&lt;span style="color:#f92672">environment&lt;/span>:
&lt;span style="color:#f92672">ACCEPT_EULA&lt;/span>: &lt;span style="color:#66d9ef">Y&lt;/span>
&lt;span style="color:#f92672">SEQ_FIRSTRUN_ADMINPASSWORDHASH&lt;/span>: &lt;span style="color:#ae81ff">QE6k2bZLWkh7BwWYRNsG3h9sZPcLskSLKJGii4mvU0rsDyN0/UqW1TwEZp43O09wvOCjbOgswZxHX7FeNo05cfiv3KkB8/q/Msj8nlXL4TGd&lt;/span> &lt;span style="color:#75715e"># 这里填写刚生成的密文&lt;/span>
&lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">unless-stopped&lt;/span>
&lt;span style="color:#f92672">volumes&lt;/span>:
- &lt;span style="color:#ae81ff">/data/seq-data:/data&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后执行 sudo docker compose up -d , 顺利的话，在配置的 web ui 端口，就可以看到管理台了。默认账户为 admin, 密码为刚才设置的密码的原始明文。&lt;/p>
&lt;h2 id="使用syslog-配置">
使用：syslog 配置
&lt;a href="#%e4%bd%bf%e7%94%a8syslog-%e9%85%8d%e7%bd%ae" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>基本上所有 Linux-base 系统都支持将系统日志通过 syslog 协议发送到远端服务器。我手头主要的 openwrt 路由器、运行 truenas 系统的 nas、树莓派上跑的 debian, 以及其他 linux 云服务器都可以无缝接入，这里简单介绍下&lt;/p>
&lt;h3 id="openwrt-配置远程-log">
openwrt 配置远程 log
&lt;a href="#openwrt-%e9%85%8d%e7%bd%ae%e8%bf%9c%e7%a8%8b-log" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>在 system -&amp;gt; system 菜单下，有个 logging 的 tab, 里面配置好服务器 ip、端口就可以使用了。协议记得选 udp&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128867.png" alt="Pasted image 20241013165852">&lt;/p>
&lt;h3 id="truenas-配置远程-log">
truenas 配置远程 log
&lt;a href="#truenas-%e9%85%8d%e7%bd%ae%e8%bf%9c%e7%a8%8b-log" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>在 system setting -&amp;gt; advaned -&amp;gt; syslog 菜单下，配置远程服务器地址和端口，协议选择 udp, 保存就可以了&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128868.png" alt="Pasted image 20241013171725">&lt;/p>
&lt;h3 id="linux-服务器配置远程-log">
linux 服务器配置远程 log
&lt;a href="#linux-%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%85%8d%e7%bd%ae%e8%bf%9c%e7%a8%8b-log" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>大多数 Linux 发行版已经预装了 rsyslog。可以通过以下命令检查是否已安装：
&lt;code>rsyslogd -version&lt;/code>
如果未安装，可以使用以下命令安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#75715e"># Debian/Ubuntu:&lt;/span>
sudo apt update
sudo apt install rsyslog
&lt;span style="color:#75715e"># CentOS/RHEL:&lt;/span>
sudo yum install rsyslog
&lt;/code>&lt;/pre>&lt;/div>&lt;p>步骤 2：配置客户端的 rsyslog
编辑 rsyslog 配置文件：打开配置文件进行编辑，通常位于 &lt;code>/etc/rsyslog.conf&lt;/code> 或 &lt;code>/etc/rsyslog.d/&lt;/code> 目录下。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">sudo nano /etc/rsyslog.conf
&lt;/code>&lt;/pre>&lt;/div>&lt;p>添加远程服务器配置：在文件末尾，添加以下行以指定远程服务器的 IP 地址和端口（默认是 UDP 514 或 TCP 514）：&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-conf" data-lang="conf">*.* @remote-server-ip:514 # 使用 UDP
*.* @@remote-server-ip:514 # 使用 TCP
&lt;/code>&lt;/pre>&lt;p>这里我们需要使用 udp 协议的。
将 remote-server-ip 替换为远程 Syslog 服务器的实际 IP 地址或者域名，保存并关闭文件。&lt;/p>
&lt;p>比如&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-conf" data-lang="conf">*.* @syslog.myserver.com:20014
&lt;/code>&lt;/pre>&lt;p>步骤 3：重启 rsyslog 服务
在进行更改后，重启 rsyslog 服务以应用新配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">sudo systemctl restart rsyslog
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="其他配置">
其他配置
&lt;a href="#%e5%85%b6%e4%bb%96%e9%85%8d%e7%bd%ae" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;h3 id="配置日志定期清理">
配置日志定期清理
&lt;a href="#%e9%85%8d%e7%bd%ae%e6%97%a5%e5%bf%97%e5%ae%9a%e6%9c%9f%e6%b8%85%e7%90%86" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>默认情况下，是没有配置日志清理规则的，时间一长服务器硬盘可能直接满了，所以这里一定不要忘记配置自动清理。在菜单里的 retention 可以配置过多少天删除&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128869.png" alt="Pasted image 20241013170659">&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202410132128870.png" alt="Pasted image 20241013170654">&lt;/p>
&lt;h3 id="配置告警通知">
配置告警通知
&lt;a href="#%e9%85%8d%e7%bd%ae%e5%91%8a%e8%ad%a6%e9%80%9a%e7%9f%a5" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>各种通知渠道的支持是通过插件形式提供的，在 设置里可以自行安装。可以支持 email、http webhook, 钉钉机器人、telegram 机器人等多种渠道。&lt;/p>
&lt;p>&lt;a href="https://www.nuget.org/packages?q=Tags%3A%22seq-app%22">插件市场链接&lt;/a>&lt;/p>
&lt;hr></description></item></channel></rss>