<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Agent &#8211; 95博客</title>
	<atom:link href="https://95bok.cn/tag/agent/feed/" rel="self" type="application/rss+xml" />
	<link>https://95bok.cn</link>
	<description>云烟</description>
	<lastBuildDate>Mon, 13 Apr 2026 07:16:22 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://95bok.cn/wp-content/uploads/2025/11/cropped-1740116058152-32x32.jpg</url>
	<title>Agent &#8211; 95博客</title>
	<link>https://95bok.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ollama + n8n 搭建本地服务器监控 Agent：自动发现问题、AI 分析、定时通知</title>
		<link>https://95bok.cn/ollama-n8n-%e6%90%ad%e5%bb%ba%e6%9c%ac%e5%9c%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9b%91%e6%8e%a7-agent%ef%bc%9a%e8%87%aa%e5%8a%a8%e5%8f%91%e7%8e%b0%e9%97%ae%e9%a2%98%e3%80%81ai-%e5%88%86%e6%9e%90/</link>
					<comments>https://95bok.cn/ollama-n8n-%e6%90%ad%e5%bb%ba%e6%9c%ac%e5%9c%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9b%91%e6%8e%a7-agent%ef%bc%9a%e8%87%aa%e5%8a%a8%e5%8f%91%e7%8e%b0%e9%97%ae%e9%a2%98%e3%80%81ai-%e5%88%86%e6%9e%90/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 03:17:22 +0000</pubDate>
				<category><![CDATA[Docker容器]]></category>
		<category><![CDATA[本地AI]]></category>
		<category><![CDATA[Agent]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[服务器监控]]></category>
		<category><![CDATA[自动化]]></category>
		<guid isPermaLink="false">https://95bok.cn/ollama-n8n-%e6%90%ad%e5%bb%ba%e6%9c%ac%e5%9c%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9b%91%e6%8e%a7-agent%ef%bc%9a%e8%87%aa%e5%8a%a8%e5%8f%91%e7%8e%b0%e9%97%ae%e9%a2%98%e3%80%81ai-%e5%88%86%e6%9e%90/</guid>

					<description><![CDATA[# Ollama + n8n 搭建本地服务器监控 Agent：自动发现问题、AI 分析、定时通知 上个月有回凌 ... <a title="Ollama + n8n 搭建本地服务器监控 Agent：自动发现问题、AI 分析、定时通知" class="read-more" href="https://95bok.cn/ollama-n8n-%e6%90%ad%e5%bb%ba%e6%9c%ac%e5%9c%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9b%91%e6%8e%a7-agent%ef%bc%9a%e8%87%aa%e5%8a%a8%e5%8f%91%e7%8e%b0%e9%97%ae%e9%a2%98%e3%80%81ai-%e5%88%86%e6%9e%90/" aria-label="阅读 Ollama + n8n 搭建本地服务器监控 Agent：自动发现问题、AI 分析、定时通知">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p># Ollama + n8n 搭建本地服务器监控 Agent：自动发现问题、AI 分析、定时通知</p>
<p>上个月有回凌晨三点，手机突然狂震——甲骨文云的免费 ARM 服务器内存爆了，PHP-FPM 挂了，95bok.cn 直接 502。</p>
<p>我摸黑爬起来 SSH 上去重启服务，当时就一个念头：<strong>能不能让 AI 帮我盯这些，别让我半夜起来干活？</strong></p>
<p>后来折腾了几天，用 n8n + Ollama 搭了个本地 Agent，还真跑起来了。今天把这个方案写下来，给同样被服务器折磨过的朋友参考。</p>
<hr />
<h2>先说思路</h2>
<p>其实逻辑不复杂：</p>
<li><strong>定时检查</strong>——n8n 每隔一段时间跑一次检查脚本</li>
<li><strong>数据判断</strong>——CPU、内存、磁盘、服务状态，哪个异常了揪出来</li>
<li><strong>AI 分析</strong>——把异常数据丢给本地 Ollama，让它用人话解释发生了什么、怎么修</li>
<li><strong>通知</strong>——通过飞书/Telegram/邮件发给我</li>
<p>关键点：<strong>全部跑在本地，数据不出服务器，不用花钱调 GPT API</strong>。</p>
<hr />
<h2>环境</h2>
<ul>
<li>Ubuntu 20.04 系统（24G 内存）</li>
<li>Ubuntu 20.04</li>
<li>Ollama 已经在跑（qwen2.5:7b）</li>
<li>n8n 用 Docker 部署</li>
<p>如果你用的是 8G 内存的小鸡，模型换成 qwen2.5:3b 或者 phi3:3.8b 就够了，7B 确实吃内存。</p>
<hr />
<h2>部署 n8n</h2>
<p>之前没装过的话：</p>
<pre><code class="language-bash">mkdir -p /opt/n8n &amp;&amp; cd /opt/n8n</p><p>cat &gt; docker-compose.yml &lt;&lt; &#039;EOF&#039;
version: &quot;3.8&quot;
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - &quot;5678:5678&quot;
    volumes:
      - n8n-data:/home/node/.n8n
    environment:
      - GENERIC_TIMEZONE=Asia/Shanghai
      - TZ=Asia/Shanghai
volumes:
  n8n-data:
EOF</p><p>docker compose up -d
</code></pre>
<p>装完访问 <code>http://你的IP:5678</code>，注册个账号进去。</p>
<p><strong>注意：</strong> Ollama 默认只监听 127.0.0.1，n8n 在 Docker 里访问不到。两个办法：</p>
<pre><code class="language-bash"># 方法一：让 Ollama 监听所有接口
sed -i '/[Service]/a Environment="OLLAMA_HOST=0.0.0.0"' /etc/systemd/system/ollama.service
systemctl daemon-reload &amp;&amp; systemctl restart ollama
</code></pre>
<p>然后 n8n 里填 <code>http://172.17.0.1:11434</code>（Docker 网关地址）。</p>
<pre><code class="language-bash"># 方法二：把 n8n 加入 host 网络（简单粗暴，但有安全隐患）
# docker-compose.yml 里加 network_mode: "host"
</code></pre>
<p>我用的方法一，稳妥一些。</p>
<hr />
<h2>API 方案（本地跑不动模型的替代方案）</h2>
<p>说实话，如果你的服务器只有 2~4G 内存，本地跑 qwen2.5:7b 确实吃力。这时候用 API 更实际。</p>
<h3>方案一：第三方 API</h3>
<p>n8n 自带 OpenAI/Anthropic/Claude 节点，直接填 API Key 就行。国内的话可以考虑：</p>
<li><strong>硅基流动</strong>（siliconflow.cn）—— 提供免费额度，qwen2.5:7b 几乎免费</li>
<li><strong>DeepSeek</strong> —— 价格低，接口兼容 OpenAI</li>
<li><strong>智谱 AI</strong> —— 国产，有免费额度</li>
<p>在 n8n 里选 OpenAI 节点，把 Base URL 改成对应服务商的地址，填上 Key 就能用。</p>
<h3>方案二：自建 API 中转</h3>
<p>如果你有自己的 API 服务（比如 OneAPI、NewAPI），可以在 n8n 里通过 HTTP Request 节点调用：</p>
<pre><code class="language-bash">cat &gt; /opt/n8n/api-check.sh &lt;&lt; &#039;SCRIPT&#039;
#!/bin/bash
# 通过 API 调用 AI 分析服务器状态
DATA=$(cat)</p><p>curl -s https://your-api-server.com/v1/chat/completions 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer your-api-key" 
  -d "{
    "model": "qwen2.5-7b-instruct",
    "messages": [
      {"role": "system", "content": "你是一个 Linux 运维助手。根据服务器状态数据，分析问题并给出修复建议。简洁回答。"},
      {"role": "user", "content": "$DATA"}
    ]
  }" | jq -r '.choices[0].message.content'
SCRIPT</p><p>chmod +x /opt/n8n/api-check.sh</p><p># 测试
echo '{"memory": "90% used", "services_down": "mysql"}' | bash /opt/n8n/api-check.sh
</code></pre>
<p>这种方式的好处：</p>
<li><strong>不占服务器资源</strong>——AI 运算在远端</li>
<li><strong>速度快</strong>——不用等本地模型加载</li>
<li><strong>灵活性高</strong>——随时换模型</li>
<p>缺点就是要花钱（虽然现在很多平台有免费额度），而且数据会出服务器。如果你对隐私要求高，还是本地 Ollama 更安心。</p>
<hr />
<h2>写个检查脚本</h2>
<p>先写个 Shell 脚本收集服务器状态：</p>
<pre><code class="language-bash">cat &gt; /opt/n8n/server-check.sh &lt;&lt; &#039;SCRIPT&#039;
#!/bin/bash
# 服务器健康检查脚本</p><p># CPU 使用率
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8"%"}')</p><p># 内存
MEM_TOTAL=$(free -m | awk '/Mem:/{print $2}')
MEM_USED=$(free -m | awk '/Mem:/{print $3}')
MEM_PCT=$(free -m | awk '/Mem:/{printf "%.1f%%", $3/$2*100}')</p><p># 磁盘
DISK=$(df -h / | awk 'NR==2{print $5 " used (" $4 " available)"}')</p><p># 关键服务状态
declare -a SERVICES=("nginx" "php-fpm" "mysql" "docker" "ollama")
DOWN_SERVICES=""</p><p>for svc in "${SERVICES[@]}"; do
  if ! systemctl is-active --quiet "$svc" 2&gt;/dev/null; then
    DOWN_SERVICES="$DOWN_SERVICESn- $svc 已停止"
  fi
done</p><p># 最近5分钟高负载进程
TOP_PROCS=$(ps aux --sort=-%mem | head -6 | tail -5 | awk '{printf "- %s (内存 %.1f%%)n", $11, $4}')</p><p># Docker 容器状态
DOCKER_STATUS=$(docker ps --format "table {{.Names}}t{{.Status}}" 2&gt;/dev/null || echo "Docker 异常")</p><p># 输出 JSON
cat &lt;&lt; EOF
{
  &quot;cpu_usage&quot;: &quot;$CPU&quot;,
  &quot;memory&quot;: &quot;$MEM_USED / $MEM_TOTAL MB ($MEM_PCT)&quot;,
  &quot;disk&quot;: &quot;$DISK&quot;,
  &quot;services_down&quot;: &quot;$(echo -e $DOWN_SERVICES | tr &#039;n&#039; &#039;;&#039;)&quot;,
  &quot;top_memory_processes&quot;: &quot;$(echo &quot;$TOP_PROCS&quot; | tr &#039;n&#039; &#039;;&#039;)&quot;,
  &quot;docker_containers&quot;: &quot;$(echo &quot;$DOCKER_STATUS&quot; | tr &#039;n&#039; &#039;;&#039;)&quot;
}
EOF
SCRIPT</p><p>chmod +x /opt/n8n/server-check.sh
</code></pre>
<p>跑一下看看效果：</p>
<pre><code class="language-bash">bash /opt/n8n/server-check.sh
</code></pre>
<p>输出的 JSON 大概长这样：</p>
<pre><code class="language-json">{
  "cpu_usage": "12.3%",
  "memory": "8542 / 24123 MB (35.4%)",
  "disk": "45% used (120G available)",
  "services_down": "",
  "top_memory_processes": "/usr/bin/java (内存 8.2%);/usr/sbin/mysqld (内存 6.1%);",
  "docker_containers": "n8n Up 2 hours;ollama Up 5 days;"
}
</code></pre>
<hr />
<h2>在 n8n 里搭工作流</h2>
<p>这一步跟搭乐高差不多。打开 n8n，新建 workflow，依次添加节点：</p>
<h3>1. Schedule 触发器</h3>
<li>选 Schedule 节点</li>
<li>触发间隔设为 <strong>每 30 分钟</strong>（或者每小时，看你需求）</li>
<li>凌晨可以设久一点，别把自己吵醒</li>
<h3>2. Execute Command 节点</h3>
<li>执行 <code>/opt/n8n/server-check.sh</code></li>
<li>拿到服务器状态的 JSON</li>
<h3>3. IF 判断节点</h3>
<p>这里加个简单的判断：如果所有服务正常、内存低于 80%，就不通知了，省得没事骚扰我。</p>
<pre><code class="language-">条件：memory 百分比 &gt; 80  或者  services_down 不为空
</code></pre>
<h3>4. Ollama Chat 节点（条件满足时才触发）</h3>
<p>把异常数据丢给 AI 分析。System Prompt 我写的：</p>
<pre><code class="language-">你是一个 Linux 运维助手。根据以下服务器状态数据，分析可能存在的问题，
并给出简洁的修复建议。用中文回答，不要废话，直接说问题和解决方案。</p><p>如果所有指标正常，回复"一切正常"即可。
</code></pre>
<p>User Message 填的是上一步的 JSON 数据。</p>
<h3>5. 通知节点</h3>
<p>我用的 Telegram Bot（飞书/邮件/钉钉都行），把 AI 的分析结果发过来。</p>
<p>完整的工作流长这样：</p>
<pre><code class="language-">Schedule → 检查脚本 → 判断异常？→ Ollama 分析 → 发通知给我
                    ↓
                 没问题就结束
</code></pre>
<hr />
<h2>实际效果</h2>
<p>跑了大概一周，说几个真实感受：</p>
<p><strong>好的地方：</strong></p>
<li>上周三 MySQL 半夜 OOM 被杀了，Agent 5 分钟内发现并通知我，还附带了 <code>systemctl restart mysql</code> 的命令，我手机上点一下就恢复了</li>
<li>有次磁盘用了 87%，AI 提醒我清 Docker 的悬空镜像，一条命令省了 15G 空间</li>
<li>不用半夜爬起来看日志了</li>
<p><strong>不太满意的地方：</strong></p>
<li>qwen2.5:7b 分析一次大概要 5~10 秒，不算快但能接受</li>
<li>有时候 AI 会给一些&#8221;万金油&#8221;建议，比如&#8221;建议排查日志&#8221;，说了等于没说</li>
<li>30 分钟检查一次其实有点频繁，后来改成 1 小时了</li>
<hr />
<h2>进阶玩法</h2>
<p>基础的搞定了，后面我又加了几个功能：</p>
<h3>自动修复（谨慎使用）</h3>
<pre><code class="language-bash"># 在 n8n 里加一个 Execute Command 节点
# 只有 AI 判断"可以安全重启"时才执行</p><p>case $SERVICE_DOWN in
  "nginx") systemctl restart nginx ;;
  "php-fpm") systemctl restart php8.2-fpm ;;
  "mysql") 
    # MySQL 被杀通常是因为 OOM，先检查内存
    if [ $(free -m | awk '/Mem:/{print $3/$2*100}') -lt 90 ]; then
      systemctl restart mysql
    fi
    ;;
esac
</code></pre>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>自动修复一定要加限制条件！</strong> 我加了内存使用率 &lt; 90% 才允许重启 MySQL，不然刚重启又会被杀掉，死循环。</p>
<h3>每日总结</h3>
<p>除了实时监控，我还加了个每天早上 9 点的定时任务：</p>
<pre><code class="language-bash"># 收集过去 24 小时的关键数据
cat &gt; /opt/n8n/daily-report.sh &lt;&lt; &#039;SCRIPT&#039;
#!/bin/bash
# 简单版日报
echo &quot;=== $(date &#039;+%Y-%m-%d&#039;) 服务器日报 ===&quot;
echo &quot;&quot;
echo &quot;平均负载: $(uptime)&quot;
echo &quot;&quot;
echo &quot;昨日登录情况:&quot;
last -20 | head -10
echo &quot;&quot;
echo &quot;磁盘变化:&quot;
df -h / | tail -1
echo &quot;&quot;
echo &quot;Docker 容器:&quot;
docker ps --format &quot;  {{.Names}} - {{.Status}}&quot;
SCRIPT
</code></pre>
<p>把报告丢给 Ollama，让它总结成一两句话发给我。比如：</p>
<blockquote>
<p>昨天服务器一切正常。凌晨 2 点有次内存飙到 85%，是 n8n 的工作流跑太多了，已清理。磁盘剩余 120G，正常。</p>
</blockquote>
<hr />
<h2>给低配机器的建议</h2>
<p>如果你用的是 1~2G 内存的小鸡：</p>
<li><strong>模型选 phi3:3.8b</strong>，大概占 2.5G 内存（含 Ollama 开销）</li>
<li><strong>n8n 可以跟 Ollama 分开部署</strong>，n8n 放另一台机器，只通过 API 调 Ollama</li>
<li><strong>检查频率拉长到 2~4 小时</strong>，别太频繁</li>
<li><strong>关掉不必要的 Docker 容器</strong>，省内存</li>
<p>实在跑不动的话，纯 Shell 脚本 + cron + 飞书 webhook 也能实现基础监控，只是少了 AI 分析这一步。</p>
<hr />
<h2>接下来想试的</h2>
<p>Agent 目前只能&#8221;发现问题 → 通知我&#8221;，下一步想让它更主动一些：</p>
<li>结合 OpenClaw 做更复杂的任务编排（比如自动备份 → 上传 → 验证完整性 → 发通知）</li>
<li>试试本地多模态模型（LLaVA），让 AI 能看截图判断页面是否正常</li>
<li>加个 Webhook 接口，Nginx 报错时自动触发检查而不是定时轮询</li>
</ul>
<p>有折腾过类似方案的朋友，欢迎聊聊你们怎么搞的。或者你们有什么想自动化的场景，我帮你试试能不能搭出来。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://95bok.cn/ollama-n8n-%e6%90%ad%e5%bb%ba%e6%9c%ac%e5%9c%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9b%91%e6%8e%a7-agent%ef%bc%9a%e8%87%aa%e5%8a%a8%e5%8f%91%e7%8e%b0%e9%97%ae%e9%a2%98%e3%80%81ai-%e5%88%86%e6%9e%90/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
