<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Node-Exporter on Chanyeol Dev</title>
    <link>https://chanyeols.com/tags/node-exporter/</link>
    <description>Recent content in Node-Exporter on Chanyeol Dev</description>
    <generator>Hugo</generator>
    <language>ko-kr</language>
    <lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://chanyeols.com/tags/node-exporter/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>노트북으로 홈서버 구축하기 - Grafana &#43; Prometheus로 서버 모니터링하기 (7편)</title>
      <link>https://chanyeols.com/posts/part-07-monitoring/</link>
      <pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://chanyeols.com/posts/part-07-monitoring/</guid>
      <description>Prometheus &#43; Grafana &#43; Node Exporter를 Docker Compose로 구성하고, 홈서버와 OCI 서버를 Tailscale VPN을 통해 동시에 모니터링하는 환경을 구축합니다. ThinkPad 배터리 메트릭 수집까지 다룹니다.</description>
      <content:encoded><![CDATA[<h2 id="구성-개요">구성 개요</h2>
<p>모니터링 스택은 세 가지로 구성된다.</p>
<ul>
<li><strong>Prometheus</strong> — 메트릭 수집 및 저장</li>
<li><strong>Grafana</strong> — 대시보드 시각화</li>
<li><strong>Node Exporter</strong> — 서버 시스템 메트릭 노출 (CPU, RAM, 디스크, 네트워크 등)</li>
</ul>
<p>Prometheus와 Grafana는 홈서버에서 Docker로 실행하고, Node Exporter는 홈서버와 OCI 서버 양쪽에 systemd로 설치했다. 두 서버가 Tailscale VPN으로 연결돼 있으니 Prometheus가 VPN을 통해 OCI 메트릭도 수집할 수 있다.</p>
<p><img alt="모니터링 구성도" loading="lazy" src="/images/homeserver-07-architecture.png"></p>
<table>
  <thead>
      <tr>
          <th>서비스</th>
          <th>포트</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Prometheus</td>
          <td>19090</td>
      </tr>
      <tr>
          <td>Grafana</td>
          <td>13000</td>
      </tr>
      <tr>
          <td>Node Exporter</td>
          <td>19100</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="1-디렉토리-생성">1. 디렉토리 생성</h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mkdir ~/monitoring <span style="color:#ff7b72;font-weight:bold">&amp;&amp;</span> cd ~/monitoring
</span></span></code></pre></div><hr>
<h2 id="2-docker-composeyml-작성">2. docker-compose.yml 작성</h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#7ee787">services</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span><span style="color:#7ee787">prometheus</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">image</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">prom/prometheus:latest</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">container_name</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">prometheus</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">restart</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">unless-stopped</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">ports</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">&#34;19090:9090&#34;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">volumes</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">./prometheus.yml:/etc/prometheus/prometheus.yml:ro</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">prometheus_data:/prometheus</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">command</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">&#39;--config.file=/etc/prometheus/prometheus.yml&#39;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">&#39;--storage.tsdb.path=/prometheus&#39;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">&#39;--storage.tsdb.retention.time=30d&#39;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span><span style="color:#7ee787">grafana</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">image</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">grafana/grafana:latest</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">container_name</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">grafana</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">restart</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">unless-stopped</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">ports</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">&#34;13000:3000&#34;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">volumes</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">grafana_data:/var/lib/grafana</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">environment</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">GF_SECURITY_ADMIN_PASSWORD=your_password_here</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#a5d6ff">GF_SERVER_ROOT_URL=http://100.109.108.36:13000</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#7ee787">volumes</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span><span style="color:#7ee787">prometheus_data</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span><span style="color:#7ee787">grafana_data</span>:<span style="color:#6e7681">
</span></span></span></code></pre></div><blockquote>
<p><code>version: &quot;3.8&quot;</code> 은 Docker Compose v2부터 obsolete라 생략했다. 넣어도 동작하지만 경고가 뜬다.</p>
</blockquote>
<hr>
<h2 id="3-prometheusyml-작성">3. prometheus.yml 작성</h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#7ee787">global</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span><span style="color:#7ee787">scrape_interval</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">15s</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span><span style="color:#7ee787">evaluation_interval</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">15s</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#7ee787">scrape_configs</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- <span style="color:#7ee787">job_name</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">&#39;thinkpad&#39;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">static_configs</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#7ee787">targets</span>:<span style="color:#6e7681"> </span>[<span style="color:#a5d6ff">&#39;100.109.108.36:19100&#39;</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">        </span><span style="color:#7ee787">labels</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">          </span><span style="color:#7ee787">instance</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">&#39;thinkpad-homeserver&#39;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span>- <span style="color:#7ee787">job_name</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">&#39;oci&#39;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">static_configs</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span>- <span style="color:#7ee787">targets</span>:<span style="color:#6e7681"> </span>[<span style="color:#a5d6ff">&#39;&lt;OCI_Tailscale_IP&gt;:19100&#39;</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">        </span><span style="color:#7ee787">labels</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">          </span><span style="color:#7ee787">instance</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">&#39;oci-server&#39;</span><span style="color:#6e7681">
</span></span></span></code></pre></div><p>OCI 서버의 Tailscale IP는 OCI에서 아래 명령으로 확인한다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>tailscale ip -4
</span></span></code></pre></div><hr>
<h2 id="4-node-exporter-설치-홈서버--oci-공통">4. Node Exporter 설치 (홈서버 + OCI 공통)</h2>
<p>두 서버 모두 동일하게 진행한다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
</span></span><span style="display:flex;"><span>tar xf node_exporter-1.8.2.linux-amd64.tar.gz
</span></span><span style="display:flex;"><span>sudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
</span></span><span style="display:flex;"><span>sudo chmod +x /usr/local/bin/node_exporter
</span></span></code></pre></div><p>systemd 서비스로 등록한다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo tee /etc/systemd/system/node_exporter.service <span style="color:#a5d6ff">&lt;&lt; &#39;EOF&#39;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">[Unit]
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">Description=Node Exporter
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">After=network.target
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">[Service]
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">Type=simple
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">User=nobody
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">ExecStart=/usr/local/bin/node_exporter --web.listen-address=&#34;:19100&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">Restart=on-failure
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">[Install]
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">WantedBy=multi-user.target
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">EOF</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo systemctl daemon-reload
</span></span><span style="display:flex;"><span>sudo systemctl enable node_exporter
</span></span><span style="display:flex;"><span>sudo systemctl start node_exporter
</span></span></code></pre></div><p>정상 동작 확인:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl status node_exporter
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># active (running) 이 뜨면 성공</span>
</span></span></code></pre></div><blockquote>
<p><code>status=203/EXEC</code> 에러가 나는 경우 바이너리 복사가 안 된 것이므로 설치 단계부터 다시 진행한다.</p>
</blockquote>
<hr>
<h2 id="5-oci-방화벽-설정">5. OCI 방화벽 설정</h2>
<p>OCI 서버에서 Node Exporter 포트를 Tailscale 인터페이스에서만 허용한다. 외부에 열면 안 된다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo ufw allow in on tailscale0 to any port <span style="color:#a5d6ff">19100</span>
</span></span><span style="display:flex;"><span>sudo ufw deny <span style="color:#a5d6ff">19100</span>
</span></span></code></pre></div><hr>
<h2 id="6-컨테이너-시작">6. 컨테이너 시작</h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd ~/monitoring
</span></span><span style="display:flex;"><span>docker compose up -d
</span></span><span style="display:flex;"><span>docker compose ps
</span></span></code></pre></div><hr>
<h2 id="7-grafana-초기-설정">7. Grafana 초기 설정</h2>
<p>브라우저에서 <code>http://100.109.108.36:13000</code> 접속.</p>
<p>초기 계정은 <code>admin</code>이고 비밀번호는 <code>docker-compose.yml</code>에 설정한 <code>GF_SECURITY_ADMIN_PASSWORD</code> 값이다.</p>
<blockquote>
<p>볼륨이 이미 생성된 상태에서 환경변수를 바꿔도 적용이 안 된다. 볼륨을 삭제하고 재시작해야 한다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker compose down
</span></span><span style="display:flex;"><span>docker volume rm monitoring_grafana_data
</span></span><span style="display:flex;"><span>docker compose up -d
</span></span></code></pre></div></blockquote>
<h3 id="prometheus-데이터소스-연결">Prometheus 데이터소스 연결</h3>
<p><strong>Connections → Data sources → Add data source → Prometheus</strong></p>
<p>URL에 <code>http://prometheus:9090</code> 입력 후 Save &amp; test.</p>
<ul>
<li>컨테이너 이름으로 통신하므로 IP 대신 서비스 이름 사용</li>
<li>포트는 컨테이너 내부 포트인 <code>9090</code> (외부 포트 <code>19090</code> 아님)</li>
</ul>
<p><code>Successfully queried the Prometheus API</code> 가 뜨면 성공이다.</p>
<h3 id="대시보드-import">대시보드 Import</h3>
<p><strong>Dashboards → Import</strong> 에서 ID <code>1860</code> 입력 후 Load.</p>
<p>Prometheus 데이터소스를 선택하고 Import하면 <strong>Node Exporter Full</strong> 대시보드가 추가된다. 상단 <code>Job</code> 드롭다운에서 <code>thinkpad</code> / <code>oci</code>를 전환하면 두 서버를 각각 모니터링할 수 있다.</p>
<p><img alt="Grafana Node Exporter Full 대시보드" loading="lazy" src="/images/homeserver-07-grafana.png"></p>
<p><img alt="OCI 서버 모니터링" loading="lazy" src="/images/homeserver-07-grafana-oci.png"></p>
<hr>
<h2 id="8-배터리-메트릭-수집-thinkpad-전용">8. 배터리 메트릭 수집 (ThinkPad 전용)</h2>
<p>ThinkPad는 배터리가 있으니 <code>powersupplyclass</code> 컬렉터를 추가로 활성화했다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vi /etc/systemd/system/node_exporter.service
</span></span></code></pre></div><p><code>ExecStart</code> 줄 수정:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>ExecStart=/usr/local/bin/node_exporter --web.listen-address=&#34;:19100&#34; --collector.powersupplyclass
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl daemon-reload
</span></span><span style="display:flex;"><span>sudo systemctl restart node_exporter
</span></span></code></pre></div><p>수집 확인:</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl http://localhost:19100/metrics | grep power_supply
</span></span></code></pre></div><p>수집되는 주요 메트릭:</p>
<table>
  <thead>
      <tr>
          <th>메트릭</th>
          <th>내용</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>node_power_supply_capacity</code></td>
          <td>배터리 잔량 (%)</td>
      </tr>
      <tr>
          <td><code>node_power_supply_online</code></td>
          <td>어댑터 연결 여부 (1=연결, 0=미연결)</td>
      </tr>
      <tr>
          <td><code>node_power_supply_power_watt</code></td>
          <td>현재 소비 전력 (W)</td>
      </tr>
      <tr>
          <td><code>node_power_supply_cyclecount</code></td>
          <td>배터리 충방전 횟수</td>
      </tr>
  </tbody>
</table>
<h3 id="grafana-배터리-패널-추가">Grafana 배터리 패널 추가</h3>
<p><strong>Dashboards → Edit → Add → Visualization</strong></p>
<ul>
<li>Visualization: <strong>Gauge</strong></li>
<li>쿼리: <code>node_power_supply_capacity</code></li>
<li>Standard options → Unit: <code>Percent (0-100)</code></li>
<li>Min: <code>0</code>, Max: <code>100</code></li>
<li>Title: <code>Battery</code></li>
</ul>
<hr>
<h2 id="접근-방식">접근 방식</h2>
<p>Grafana와 Prometheus는 Portainer와 마찬가지로 외부에 열지 않고 Tailscale VPN 안에서만 접근한다.</p>
<pre tabindex="0"><code>Grafana    → http://100.109.108.36:13000 (Tailscale VPN)
Prometheus → http://100.109.108.36:19090 (Tailscale VPN)
</code></pre><p>모니터링 툴을 외부에 노출하면 서버 내부 정보가 그대로 보이기 때문이다.</p>
<hr>
<h2 id="정리">정리</h2>
<ul>
<li>Node Exporter를 두 서버에 설치하고 Prometheus가 Tailscale VPN으로 수집하는 구조</li>
<li>OCI의 Node Exporter 포트는 Tailscale 인터페이스에서만 허용할 것</li>
<li>Grafana 데이터소스 URL은 컨테이너 서비스 이름(<code>prometheus:9090</code>)으로 설정</li>
<li>ThinkPad는 <code>--collector.powersupplyclass</code> 옵션으로 배터리 메트릭도 수집 가능</li>
</ul>
<p>다음 편에서는 OCI 서버 auth.log에 쌓인 SSH 브루트포스 공격을 Fail2ban으로 자동 차단하는 방법을 다룬다.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
