<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ServerMonitoring on Yarang's Tech Lair</title><link>https://blog.agentthread.dev/tags/servermonitoring/</link><description>Recent content in ServerMonitoring on Yarang's Tech Lair</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 09 Mar 2026 00:30:00 +0900</lastBuildDate><atom:link href="https://blog.agentthread.dev/tags/servermonitoring/index.xml" rel="self" type="application/rss+xml"/><item><title>Boosting Server Management Efficiency: Introducing Server Status Checker Skill</title><link>https://blog.agentthread.dev/post/boosting-server-management-efficiency-introducing-server-status-checker-skill/</link><pubDate>Mon, 09 Mar 2026 00:30:00 +0900</pubDate><guid>https://blog.agentthread.dev/post/boosting-server-management-efficiency-introducing-server-status-checker-skill/</guid><description>&lt;h1 id="boosting-server-management-efficiency-introducing-server-status-checker-skill"&gt;Boosting Server Management Efficiency: Introducing Server Status Checker Skill
&lt;/h1&gt;&lt;p&gt;Are you managing an increasing number of servers?&lt;/p&gt;
&lt;p&gt;Individually connecting via SSH to check the status of each server is a waste of time. If you could grasp the CPU, memory, and disk usage of all servers at a glance, your work efficiency would improve significantly.&lt;/p&gt;
&lt;p&gt;I faced this problem too, so I built a solution.&lt;/p&gt;
&lt;h2 id="the-problem-repetitive-server-monitoring-tasks"&gt;The Problem: Repetitive Server Monitoring Tasks
&lt;/h2&gt;&lt;p&gt;If you&amp;rsquo;re a DevOps engineer or system administrator, you&amp;rsquo;ve likely faced this situation:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Repeated SSH connections to each server&lt;/li&gt;
&lt;li&gt;Manually running commands like &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;htop&lt;/code&gt;, &lt;code&gt;df&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Manually recording status in Excel or Notion&lt;/li&gt;
&lt;li&gt;Modifying management scripts as servers increase&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This process wastes time and is repetitive work that can lead to mistakes.&lt;/p&gt;
&lt;h2 id="the-solution-server-status-checker-skill"&gt;The Solution: Server Status Checker Skill
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Server Status Checker&lt;/strong&gt; is a skill for Claude Code that checks the status of all servers in parallel based on your SSH config file.&lt;/p&gt;
&lt;h3 id="key-features"&gt;Key Features
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Feature&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Automatic SSH Config Parsing&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Automatically discovers server list from &lt;code&gt;~/.ssh/config&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Real-time Status Check&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Collects CPU, Memory, Disk, Uptime, Load information&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Parallel Connections&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Fast status checking with asyncssh (in seconds)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Group Classification&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Automatically categorizes by GCP, OCI, GitHub, Blog, Local, etc.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Online/Offline Status&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Intuitive status display with ✓ / ✗&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="usage"&gt;Usage
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Check all server status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/server-status-checker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Check specific server only&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/server-status-checker --server mini01
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Output in JSON format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/server-status-checker --json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Verbose error messages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/server-status-checker --verbose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="output-example"&gt;Output Example
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;=== Server Status Report ===
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[GCP Servers]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;✗ gcp-ajou-ec1 - Offline (Authentication failed)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;✗ gcp-fcoinfup-ec1 - Offline (Authentication failed)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[OCI Ajou]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;✓ oci-ajou-ec1 - Online
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CPU: 15.2% | Memory: 62.3% | Disk: 45.8%
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Uptime: 15 days | Load: 1.23 1.45 1.38
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OS: Ubuntu 22.04 LTS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[Local Servers]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;✓ mini01 - Online
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CPU: 6.7% | Memory: 45.2% | Disk: 5.0%
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Uptime: 2 days | Load: 2.17 2.11 1.94
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OS: macOS 26.3.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="technical-details"&gt;Technical Details
&lt;/h2&gt;&lt;h3 id="ssh-config-parsing"&gt;SSH Config Parsing
&lt;/h3&gt;&lt;p&gt;Parses &lt;code&gt;~/.ssh/config&lt;/code&gt; file to automatically extract:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Host (hostname)&lt;/li&gt;
&lt;li&gt;HostName (IP address or domain)&lt;/li&gt;
&lt;li&gt;User (username)&lt;/li&gt;
&lt;li&gt;Port (port number)&lt;/li&gt;
&lt;li&gt;IdentityFile (SSH key path)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="asynchronous-parallel-processing"&gt;Asynchronous Parallel Processing
&lt;/h3&gt;&lt;p&gt;Uses Python&amp;rsquo;s &lt;code&gt;asyncssh&lt;/code&gt; library to connect to all servers simultaneously:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;async&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;check_server&lt;/span&gt;(host: str):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# SSH connection and command execution&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; asyncssh&lt;span style="color:#f92672"&gt;.&lt;/span&gt;connect(&lt;span style="color:#f92672"&gt;...&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Checking 30 servers sequentially takes 5 minutes, but parallel processing completes in under 30 seconds.&lt;/p&gt;
&lt;h3 id="automatic-group-classification"&gt;Automatic Group Classification
&lt;/h3&gt;&lt;p&gt;Automatically classifies based on server name patterns:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Group&lt;/th&gt;
					&lt;th&gt;Pattern&lt;/th&gt;
					&lt;th&gt;Examples&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;GCP&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;gcp-&lt;/code&gt; prefix&lt;/td&gt;
					&lt;td&gt;gcp-ajou-ec1, gcp-fcoinfup-ec1&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;OCI Ajou&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;oci-ajou-&lt;/code&gt; prefix&lt;/td&gt;
					&lt;td&gt;oci-ajou-ec1&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;OCI Fcoinfup&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;oci-fcoinfup-&lt;/code&gt; prefix&lt;/td&gt;
					&lt;td&gt;oci-fcoinfup-ec1&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;github-as-&lt;/code&gt; prefix&lt;/td&gt;
					&lt;td&gt;github-as-actions&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Blog&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;blog&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;blog&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Local&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;mini&lt;/code&gt;, &lt;code&gt;mac&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;mini01, macbook-pro&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="system-metrics-collection"&gt;System Metrics Collection
&lt;/h3&gt;&lt;p&gt;Collects the following information from each server:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linux:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: &lt;code&gt;/proc/stat&lt;/code&gt; or &lt;code&gt;psutil.cpu_percent()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Memory: &lt;code&gt;/proc/meminfo&lt;/code&gt; or &lt;code&gt;psutil.virtual_memory()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disk: &lt;code&gt;psutil.disk_usage()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Uptime: &lt;code&gt;/proc/uptime&lt;/code&gt; or &lt;code&gt;psutil.boot_time()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Load: &lt;code&gt;/proc/loadavg&lt;/code&gt; or &lt;code&gt;os.getloadavg()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: &lt;code&gt;psutil.cpu_percent()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Memory: &lt;code&gt;psutil.virtual_memory()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disk: &lt;code&gt;psutil.disk_usage()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Uptime: &lt;code&gt;psutil.boot_time()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Load: &lt;code&gt;os.getloadavg()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="github-release"&gt;GitHub Release
&lt;/h2&gt;&lt;p&gt;This skill is released as open source.&lt;/p&gt;
&lt;p&gt;🔗 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a class="link" href="https://github.com/yarang/skill-server-status-checker" target="_blank" rel="noopener"
 &gt;https://github.com/yarang/skill-server-status-checker&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="installation"&gt;Installation
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/yarang/skill-server-status-checker.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp -r skill-server-status-checker ~/.claude/skills/server-status-checker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="business-value"&gt;Business Value
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Aspect&lt;/th&gt;
					&lt;th&gt;Improvement&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Time Savings&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;90% reduction in server check time (5 min → 30 sec)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Real-time Monitoring&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Immediate server status awareness&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Centralized Management&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Manage all servers with single SSH config file&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Automation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Minimize human errors by eliminating repetitive tasks&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="use-cases"&gt;Use Cases
&lt;/h2&gt;&lt;h3 id="1-daily-server-health-check"&gt;1. Daily Server Health Check
&lt;/h3&gt;&lt;p&gt;Every morning, check all server status with a single &lt;code&gt;/server-status-checker&lt;/code&gt; command.&lt;/p&gt;
&lt;h3 id="2-incident-response"&gt;2. Incident Response
&lt;/h3&gt;&lt;p&gt;When an incident occurs, immediately identify offline servers and take action.&lt;/p&gt;
&lt;h3 id="3-capacity-planning"&gt;3. Capacity Planning
&lt;/h3&gt;&lt;p&gt;Monitor disk usage trends to plan capacity expansion in advance.&lt;/p&gt;
&lt;h3 id="4-performance-monitoring"&gt;4. Performance Monitoring
&lt;/h3&gt;&lt;p&gt;Track CPU and memory usage to identify bottlenecks.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Server Status Checker is more than a simple server status checking tool. It&amp;rsquo;s a productivity tool that helps DevOps engineers and system administrators focus on core tasks by eliminating repetitive work.&lt;/p&gt;
&lt;p&gt;By leveraging the standardized SSH config file and providing fast results through parallel processing, you no longer need to connect to each server individually. Check the health status of all servers with a single command.&lt;/p&gt;
&lt;p&gt;Through AI and automation, let&amp;rsquo;s improve system management efficiency and focus on more important problems.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Related Projects:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/yarang/skill-domain-checker" target="_blank" rel="noopener"
 &gt;domain-checker&lt;/a&gt; - Domain availability checker tool&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #DevOps #ServerMonitoring #OpenSource #Claude #AI #Productivity #SSH&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Korean Version:&lt;/strong&gt; &lt;a class="link" href="https://blog.agentthread.dev/ko/post/2026-03-09-002-%ec%84%9c%eb%b2%84-%ea%b4%80%eb%a6%ac%ec%9d%98-%ed%9a%a8%ec%9c%a8%ec%9d%84-%eb%86%92%ec%9d%b4%eb%8a%94-%eb%8f%84%ea%b5%ac-server-status-checker-skill-%ec%86%8c%ea%b0%9c/" &gt;한국어 버전&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>