<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://wiki.chnagil.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chnagil</id>
	<title>잉여 위키 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.chnagil.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chnagil"/>
	<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Chnagil"/>
	<updated>2026-10-01T06:41:51Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=SNMP%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%84%9C%EB%B2%84&amp;diff=120</id>
		<title>SNMP테스트서버</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=SNMP%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%84%9C%EB%B2%84&amp;diff=120"/>
		<updated>2026-09-23T13:28:45Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Rocky Linux 9 통합 모니터링 서버 구축 가이드 - 초보자용 =&lt;br /&gt;
: Telegraf / InfluxDB / Grafana / Prometheus / Node Exporter / Windows Exporter / Loki / Alloy / rsyslog&lt;br /&gt;
&lt;br /&gt;
작성 목적: 처음 모니터링 서버를 설치하는 사용자가 &amp;quot;왜 이 프로그램이 필요한지&amp;quot;, &amp;quot;어떤 순서로 설치하는지&amp;quot;, &amp;quot;어디까지 정상이어야 다음 단계로 넘어가는지&amp;quot;를 이해하면서 구축할 수 있도록 작성한다.&lt;br /&gt;
&lt;br /&gt;
본 문서는 실제 운영 과정에서 구성하고 점검한 내용을 바탕으로 정리했으며, 실제 IP 주소와 인증 정보는 문서용 예시 값으로 변경하였다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;중요:&#039;&#039;&#039; 아래 명령을 한 번에 모두 실행하지 않는다. 각 절의 &#039;&#039;&#039;정상 확인&#039;&#039;&#039; 항목을 통과한 뒤 다음 단계로 진행한다.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 0. 이 문서에서 만들 시스템 ==&lt;br /&gt;
&lt;br /&gt;
=== 0.1 먼저 전체 구조부터 이해하기 ===&lt;br /&gt;
&lt;br /&gt;
모니터링을 처음 구성할 때 가장 혼동하기 쉬운 부분은 &amp;quot;Grafana가 모든 데이터를 직접 수집한다&amp;quot;고 생각하는 것이다.&lt;br /&gt;
&lt;br /&gt;
Grafana는 주로 &#039;&#039;&#039;보여주는 역할&#039;&#039;&#039;을 한다. 실제 데이터 수집과 저장은 다른 프로그램이 담당한다.&lt;br /&gt;
&lt;br /&gt;
이 문서에서는 데이터를 크게 두 종류로 나눈다.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Metric&#039;&#039;&#039; : CPU 사용률, 메모리 사용률, 포트 트래픽, Ping 손실률처럼 숫자로 표현되는 값&lt;br /&gt;
# &#039;&#039;&#039;Log&#039;&#039;&#039; : Syslog, 서버 이벤트, NAS 접근 기록처럼 문자열로 기록되는 이벤트&lt;br /&gt;
&lt;br /&gt;
전체 데이터 흐름은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Network Switch]&lt;br /&gt;
      |&lt;br /&gt;
      | SNMPv3&lt;br /&gt;
      v&lt;br /&gt;
  Telegraf&lt;br /&gt;
      |&lt;br /&gt;
      v&lt;br /&gt;
  InfluxDB&lt;br /&gt;
      |&lt;br /&gt;
      +-------------------+&lt;br /&gt;
                          |&lt;br /&gt;
[Linux / QNAP]            |&lt;br /&gt;
      |                   |&lt;br /&gt;
      | node_exporter     |&lt;br /&gt;
      v                   |&lt;br /&gt;
  Prometheus              |&lt;br /&gt;
      |                   |&lt;br /&gt;
      +-------------------+&lt;br /&gt;
                          |&lt;br /&gt;
[Network / Server / NAS]  |&lt;br /&gt;
      |                   |&lt;br /&gt;
      | Syslog            |&lt;br /&gt;
      v                   |&lt;br /&gt;
   rsyslog                |&lt;br /&gt;
      |                   |&lt;br /&gt;
      v                   |&lt;br /&gt;
   Log File               |&lt;br /&gt;
      |                   |&lt;br /&gt;
      v                   |&lt;br /&gt;
    Alloy                 |&lt;br /&gt;
      |                   |&lt;br /&gt;
      v                   |&lt;br /&gt;
     Loki                 |&lt;br /&gt;
      |                   |&lt;br /&gt;
      +-------------------+&lt;br /&gt;
                          |&lt;br /&gt;
                          v&lt;br /&gt;
                       Grafana&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
즉 다음과 같이 기억하면 된다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 프로그램&lt;br /&gt;
! 하는 일&lt;br /&gt;
! 쉽게 표현하면&lt;br /&gt;
|-&lt;br /&gt;
| Telegraf&lt;br /&gt;
| SNMP 장비의 값을 주기적으로 읽음&lt;br /&gt;
| 네트워크 장비용 수집기&lt;br /&gt;
|-&lt;br /&gt;
| InfluxDB&lt;br /&gt;
| Telegraf가 수집한 시계열 값을 저장&lt;br /&gt;
| SNMP 데이터 창고&lt;br /&gt;
|-&lt;br /&gt;
| Prometheus&lt;br /&gt;
| Exporter가 공개한 Metric을 주기적으로 가져와 저장&lt;br /&gt;
| 서버 Metric 수집기 + 데이터베이스&lt;br /&gt;
|-&lt;br /&gt;
| Node Exporter&lt;br /&gt;
| Linux/QNAP의 CPU, 메모리, 디스크, 네트워크 Metric 제공&lt;br /&gt;
| Linux 상태 측정기&lt;br /&gt;
|-&lt;br /&gt;
| Windows Exporter&lt;br /&gt;
| Windows 성능 카운터 Metric 제공&lt;br /&gt;
| Windows 상태 측정기&lt;br /&gt;
|-&lt;br /&gt;
| rsyslog&lt;br /&gt;
| 장비/서버가 보내는 Syslog를 수신하여 파일로 저장&lt;br /&gt;
| 로그 수신기&lt;br /&gt;
|-&lt;br /&gt;
| Alloy&lt;br /&gt;
| 로그 파일을 읽고 필요한 항목을 분리하여 Loki로 전달&lt;br /&gt;
| 로그 전달/가공기&lt;br /&gt;
|-&lt;br /&gt;
| Loki&lt;br /&gt;
| 로그를 저장하고 검색 가능하게 함&lt;br /&gt;
| 로그 데이터베이스&lt;br /&gt;
|-&lt;br /&gt;
| Grafana&lt;br /&gt;
| 위 데이터들을 Dashboard와 Alert로 표현&lt;br /&gt;
| 통합 화면&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 0.2 왜 하나의 프로그램으로 모두 처리하지 않는가 ===&lt;br /&gt;
&lt;br /&gt;
SNMP, 서버 Metric, 로그는 데이터 성격이 서로 다르다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 스위치 포트 트래픽은 누적 Counter를 주기적으로 읽어 증가량을 계산해야 한다. 반면 Syslog는 특정 시점에 발생한 문자열 이벤트이다.&lt;br /&gt;
&lt;br /&gt;
따라서 본 구성에서는 각 도구가 가장 잘하는 역할을 분리한다.&lt;br /&gt;
&lt;br /&gt;
* Switch SNMP → Telegraf + InfluxDB&lt;br /&gt;
* Linux / Windows / QNAP OS Metric → Prometheus&lt;br /&gt;
* Syslog → rsyslog + Alloy + Loki&lt;br /&gt;
* 최종 화면 → Grafana&lt;br /&gt;
&lt;br /&gt;
이 구조를 이해하면 장애 발생 시 어느 부분을 확인해야 하는지도 쉽게 구분할 수 있다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 Grafana에서 Linux CPU가 보이지 않는다면 다음 순서로 생각한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Grafana 문제인가?&lt;br /&gt;
    ↓&lt;br /&gt;
Prometheus에 데이터가 있는가?&lt;br /&gt;
    ↓&lt;br /&gt;
Prometheus가 node_exporter를 수집하고 있는가?&lt;br /&gt;
    ↓&lt;br /&gt;
node_exporter가 정상 실행 중인가?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. 예제 환경과 주소 ==&lt;br /&gt;
&lt;br /&gt;
실제 운영 IP를 문서에 노출하지 않기 위해 RFC 5737 문서용 주소를 사용한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 대상&lt;br /&gt;
! 문서용 IP&lt;br /&gt;
! 역할&lt;br /&gt;
|-&lt;br /&gt;
| Monitoring Server&lt;br /&gt;
| 192.0.2.10&lt;br /&gt;
| Grafana / Prometheus / InfluxDB / Telegraf / Loki / Alloy / rsyslog&lt;br /&gt;
|-&lt;br /&gt;
| Linux Server&lt;br /&gt;
| 192.0.2.20&lt;br /&gt;
| node_exporter&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server&lt;br /&gt;
| 192.0.2.30&lt;br /&gt;
| windows_exporter&lt;br /&gt;
|-&lt;br /&gt;
| QNAP NAS&lt;br /&gt;
| 198.51.100.10&lt;br /&gt;
| node_exporter / SNMP / Syslog&lt;br /&gt;
|-&lt;br /&gt;
| Switch-01&lt;br /&gt;
| 203.0.113.11&lt;br /&gt;
| SNMP / Syslog&lt;br /&gt;
|-&lt;br /&gt;
| Switch-02&lt;br /&gt;
| 203.0.113.12&lt;br /&gt;
| SNMP / Syslog&lt;br /&gt;
|-&lt;br /&gt;
| Switch-03&lt;br /&gt;
| 203.0.113.13&lt;br /&gt;
| SNMP / Syslog&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
실제 설치 시 위 주소를 자신의 환경에 맞게 변경한다.&lt;br /&gt;
&lt;br /&gt;
== 2. 설치 전에 알아둘 용어 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 Metric ===&lt;br /&gt;
&lt;br /&gt;
Metric은 시간에 따라 변화하는 숫자 데이터이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
* CPU 32%&lt;br /&gt;
* Memory 71%&lt;br /&gt;
* Switch Port RX 120 Mbps&lt;br /&gt;
* Ping Packet Loss 0%&lt;br /&gt;
* HDD Temperature 43°C&lt;br /&gt;
&lt;br /&gt;
이런 값은 시간 흐름에 따라 그래프로 보는 것이 중요하다.&lt;br /&gt;
&lt;br /&gt;
=== 2.2 Counter와 Gauge ===&lt;br /&gt;
&lt;br /&gt;
SNMP에서 자주 만나는 개념이다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gauge&#039;&#039;&#039;는 현재 값을 의미한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
CPU Usage = 35&lt;br /&gt;
Temperature = 44&lt;br /&gt;
operStatus = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Counter&#039;&#039;&#039;는 계속 증가하는 누적값이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ifHCInOctets = 1234567890123&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 값을 그대로 그래프로 그리면 계속 증가하기만 한다.&lt;br /&gt;
&lt;br /&gt;
그래서 실제 트래픽은 현재 값과 이전 값의 차이를 시간으로 나누어 계산한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
현재 Counter - 이전 Counter&lt;br /&gt;
---------------------------&lt;br /&gt;
        경과 시간&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Octet은 8 bit이므로 bps를 구하려면 다시 8을 곱한다.&lt;br /&gt;
&lt;br /&gt;
Grafana/Flux에서는 이를 derivative()로 처리한다.&lt;br /&gt;
&lt;br /&gt;
=== 2.3 Label과 Tag ===&lt;br /&gt;
&lt;br /&gt;
장비가 여러 대일 때 어떤 데이터가 어느 장비인지 구분하기 위한 값이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
source=203.0.113.11&lt;br /&gt;
if_name=port24&lt;br /&gt;
index=24&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prometheus에서는 주로 &#039;&#039;&#039;label&#039;&#039;&#039;, InfluxDB에서는 &#039;&#039;&#039;tag&#039;&#039;&#039;라고 부른다.&lt;br /&gt;
&lt;br /&gt;
=== 2.4 Exporter ===&lt;br /&gt;
&lt;br /&gt;
Prometheus가 직접 Linux 내부 명령을 실행하는 것은 아니다.&lt;br /&gt;
&lt;br /&gt;
Exporter가 시스템 정보를 HTTP Metric 형식으로 공개하고 Prometheus가 이를 가져간다.&lt;br /&gt;
&lt;br /&gt;
Node Exporter 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
http://192.0.2.20:9100/metrics&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows Exporter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
http://192.0.2.30:9182/metrics&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Rocky Linux 9 기본 준비 ==&lt;br /&gt;
&lt;br /&gt;
이 장에서는 모니터링 프로그램을 설치하기 전에 OS가 정상인지 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 3.1 시스템 상태 확인 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
cat /etc/rocky-release&lt;br /&gt;
uname -m&lt;br /&gt;
&lt;br /&gt;
ip -br address&lt;br /&gt;
ip route&lt;br /&gt;
&lt;br /&gt;
df -hT&lt;br /&gt;
free -h&lt;br /&gt;
&lt;br /&gt;
getenforce&lt;br /&gt;
ss -lntup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
각 명령의 의미:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 명령&lt;br /&gt;
! 확인 내용&lt;br /&gt;
|-&lt;br /&gt;
| cat /etc/rocky-release&lt;br /&gt;
| Rocky Linux 버전&lt;br /&gt;
|-&lt;br /&gt;
| uname -m&lt;br /&gt;
| CPU Architecture, 일반적인 x86 서버는 x86_64&lt;br /&gt;
|-&lt;br /&gt;
| ip -br address&lt;br /&gt;
| 서버 IP 주소&lt;br /&gt;
|-&lt;br /&gt;
| ip route&lt;br /&gt;
| Gateway 및 Routing&lt;br /&gt;
|-&lt;br /&gt;
| df -hT&lt;br /&gt;
| 디스크 용량&lt;br /&gt;
|-&lt;br /&gt;
| free -h&lt;br /&gt;
| 메모리&lt;br /&gt;
|-&lt;br /&gt;
| getenforce&lt;br /&gt;
| SELinux 상태&lt;br /&gt;
|-&lt;br /&gt;
| ss -lntup&lt;br /&gt;
| 현재 사용 중인 TCP/UDP Port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;초보자 주의:&#039;&#039;&#039; SELinux가 Enforcing이라고 해서 바로 Disabled로 변경하지 않는다. 이후 permission 문제가 발생하면 원인을 확인하고 필요한 정책 또는 Context를 수정한다.&lt;br /&gt;
&lt;br /&gt;
=== 3.2 기존 설정 백업 ===&lt;br /&gt;
&lt;br /&gt;
기존 운영 서버에 구축하는 경우 설정을 변경하기 전에 백업한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
umask 077&lt;br /&gt;
&lt;br /&gt;
MON_BACKUP=&amp;quot;/root/monitor-backup-$(date +%Y%m%d-%H%M%S)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
install -d -m 700 &amp;quot;$MON_BACKUP&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cp -a /etc/rsyslog.conf &amp;quot;$MON_BACKUP/&amp;quot; 2&amp;gt;/dev/null || true&lt;br /&gt;
cp -a /etc/rsyslog.d &amp;quot;$MON_BACKUP/&amp;quot; 2&amp;gt;/dev/null || true&lt;br /&gt;
cp -a /etc/chrony.conf &amp;quot;$MON_BACKUP/&amp;quot; 2&amp;gt;/dev/null || true&lt;br /&gt;
cp -a /etc/firewalld &amp;quot;$MON_BACKUP/&amp;quot; 2&amp;gt;/dev/null || true&lt;br /&gt;
&lt;br /&gt;
rpm -qa | sort &amp;gt; &amp;quot;$MON_BACKUP/packages-before.txt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
백업 경로 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
echo &amp;quot;$MON_BACKUP&amp;quot;&lt;br /&gt;
ls -al &amp;quot;$MON_BACKUP&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.3 기본 관리 도구 설치 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
dnf install -y \&lt;br /&gt;
    curl \&lt;br /&gt;
    ca-certificates \&lt;br /&gt;
    gnupg2 \&lt;br /&gt;
    vim-enhanced \&lt;br /&gt;
    net-snmp-utils \&lt;br /&gt;
    rsyslog \&lt;br /&gt;
    logrotate \&lt;br /&gt;
    chrony \&lt;br /&gt;
    tcpdump \&lt;br /&gt;
    iputils \&lt;br /&gt;
    sysstat \&lt;br /&gt;
    policycoreutils-python-utils \&lt;br /&gt;
    dnf-plugins-core \&lt;br /&gt;
    jq&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
주요 패키지 용도:&lt;br /&gt;
&lt;br /&gt;
* net-snmp-utils : snmpget, snmpwalk 테스트&lt;br /&gt;
* tcpdump : 실제 Packet 수신 확인&lt;br /&gt;
* jq : JSON 출력 가독성 개선&lt;br /&gt;
* sysstat : iostat 등 서버 I/O 점검&lt;br /&gt;
* chrony : 시간 동기화&lt;br /&gt;
* policycoreutils-python-utils : SELinux 진단/정책 작업&lt;br /&gt;
&lt;br /&gt;
=== 3.4 시간 동기화 ===&lt;br /&gt;
&lt;br /&gt;
모니터링에서는 서버와 장비 시간이 맞지 않으면 장애 시각 비교가 어렵다.&lt;br /&gt;
&lt;br /&gt;
Timezone 설정:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
timedatectl set-timezone Asia/Seoul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
chronyd 시작:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl enable --now chronyd&lt;br /&gt;
systemctl restart chronyd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chronyc tracking&lt;br /&gt;
chronyc sources -v&lt;br /&gt;
date -Ins&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;정상 확인&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* chronyd가 active&lt;br /&gt;
* chronyc sources에서 선택된 NTP Source 존재&lt;br /&gt;
* 현재 시간이 실제 시간과 크게 다르지 않음&lt;br /&gt;
&lt;br /&gt;
== 4. InfluxDB와 Telegraf를 설치하는 이유 ==&lt;br /&gt;
&lt;br /&gt;
스위치의 SNMP 값을 수집하려면 두 프로그램이 필요하다.&lt;br /&gt;
&lt;br /&gt;
Telegraf는 장비에 SNMP Query를 보내는 역할을 한다.&lt;br /&gt;
&lt;br /&gt;
InfluxDB는 Telegraf가 가져온 값을 시간 순서대로 저장한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Switch --SNMP--&amp;gt; Telegraf --&amp;gt; InfluxDB --&amp;gt; Grafana&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. InfluxDB / Telegraf / Grafana 설치 ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 InfluxData Repository 추가 ===&lt;br /&gt;
&lt;br /&gt;
공식 Repository Key를 내려받는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -fL https://repos.influxdata.com/influxdata-archive.key \&lt;br /&gt;
    -o /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
&lt;br /&gt;
gpg --show-keys --with-fingerprint \&lt;br /&gt;
    /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
&lt;br /&gt;
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Repository 파일 생성:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/yum.repos.d/influxdata.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[influxdata]&lt;br /&gt;
name=InfluxData Repository - Stable&lt;br /&gt;
baseurl=https://repos.influxdata.com/stable/$basearch/main&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
sslverify=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Grafana Repository 추가 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/yum.repos.d/grafana.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[grafana]&lt;br /&gt;
name=Grafana OSS repository&lt;br /&gt;
baseurl=https://rpm.grafana.com&lt;br /&gt;
repo_gpgcheck=1&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=https://rpm.grafana.com/gpg.key&lt;br /&gt;
sslverify=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Repository 확인 후 설치 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
dnf makecache&lt;br /&gt;
&lt;br /&gt;
dnf list --showduplicates \&lt;br /&gt;
    telegraf \&lt;br /&gt;
    influxdb2 \&lt;br /&gt;
    influxdb2-cli \&lt;br /&gt;
    grafana&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
설치:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
dnf install -y \&lt;br /&gt;
    telegraf \&lt;br /&gt;
    influxdb2 \&lt;br /&gt;
    influxdb2-cli \&lt;br /&gt;
    grafana&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
버전 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rpm -q telegraf influxdb2 influxdb2-cli grafana&lt;br /&gt;
&lt;br /&gt;
telegraf --version&lt;br /&gt;
influxd version&lt;br /&gt;
influx version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;왜 버전을 기록하는가?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
나중에 설정 문법 또는 Plugin 동작이 달라졌을 때 원인을 판단하기 쉽기 때문이다.&lt;br /&gt;
&lt;br /&gt;
실제 구성 과정에서는 Telegraf 1.40.0 환경에서 동작을 확인하였다.&lt;br /&gt;
&lt;br /&gt;
== 6. InfluxDB 초기 설정 ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 InfluxDB를 localhost에만 Bind ===&lt;br /&gt;
&lt;br /&gt;
현재 구성에서는 InfluxDB를 외부 장비가 직접 접근할 필요가 없다.&lt;br /&gt;
&lt;br /&gt;
Telegraf와 Grafana가 같은 서버에 있으므로 127.0.0.1에만 Bind하면 공격 표면을 줄일 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -d -m 755 \&lt;br /&gt;
  /etc/systemd/system/influxdb.service.d&lt;br /&gt;
&lt;br /&gt;
vi /etc/systemd/system/influxdb.service.d/10-listen.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;INFLUXD_HTTP_BIND_ADDRESS=127.0.0.1:8086&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
적용:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
systemctl enable --now influxdb&lt;br /&gt;
systemctl restart influxdb&lt;br /&gt;
&lt;br /&gt;
systemctl status influxdb --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Listen 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ss -lntp | grep &#039;:8086&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Health Check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -fsS http://127.0.0.1:8086/health&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;정상 확인&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:8086에서 LISTEN하고 health 응답이 정상이어야 한다.&lt;br /&gt;
&lt;br /&gt;
=== 6.2 InfluxDB 최초 Setup ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
influx setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
초기 입력 예:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 예시&lt;br /&gt;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| Username&lt;br /&gt;
| monitor-admin&lt;br /&gt;
| InfluxDB 관리 계정&lt;br /&gt;
|-&lt;br /&gt;
| Organization&lt;br /&gt;
| network&lt;br /&gt;
| 관련 데이터의 논리적 그룹&lt;br /&gt;
|-&lt;br /&gt;
| Bucket&lt;br /&gt;
| snmp_raw&lt;br /&gt;
| SNMP 데이터 저장 위치&lt;br /&gt;
|-&lt;br /&gt;
| Retention&lt;br /&gt;
| 720h&lt;br /&gt;
| 30일 보존&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
influx bucket list --org network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bucket이란?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
일반 Database의 Database 또는 Table과 완전히 같지는 않지만, 처음에는 &amp;quot;Metric 저장 공간&amp;quot; 정도로 이해하면 된다.&lt;br /&gt;
&lt;br /&gt;
=== 6.3 Token을 서비스별로 나누는 이유 ===&lt;br /&gt;
&lt;br /&gt;
Telegraf는 데이터를 쓰기만 하면 되고 Grafana는 읽기만 하면 된다.&lt;br /&gt;
&lt;br /&gt;
따라서 하나의 관리자 Token을 모든 프로그램에 넣지 않는다.&lt;br /&gt;
&lt;br /&gt;
권장:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Token&lt;br /&gt;
! 권한&lt;br /&gt;
|-&lt;br /&gt;
| telegraf-write&lt;br /&gt;
| snmp_raw Write&lt;br /&gt;
|-&lt;br /&gt;
| grafana-read&lt;br /&gt;
| snmp_raw Read&lt;br /&gt;
|-&lt;br /&gt;
| Operator Token&lt;br /&gt;
| 관리자 전용&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
실제 Token 값은 Wiki에 기록하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 7. Telegraf 기본 설정 ==&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Telegraf의 역할 ===&lt;br /&gt;
&lt;br /&gt;
Telegraf는 일정 시간마다 스위치에 SNMP Query를 보내고 결과를 InfluxDB에 저장한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Telegraf&lt;br /&gt;
   |&lt;br /&gt;
   | UDP/161 SNMP GET&lt;br /&gt;
   v&lt;br /&gt;
Switch&lt;br /&gt;
&lt;br /&gt;
Telegraf&lt;br /&gt;
   |&lt;br /&gt;
   | HTTP 8086&lt;br /&gt;
   v&lt;br /&gt;
InfluxDB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.2 인증 정보를 설정 파일과 분리 ===&lt;br /&gt;
&lt;br /&gt;
SNMP Password와 InfluxDB Token을 여러 설정 파일에 직접 적으면 관리가 어렵다.&lt;br /&gt;
&lt;br /&gt;
환경변수 파일로 분리한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/telegraf/monitor.env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
INFLUX_WRITE_TOKEN=&#039;&amp;lt;WRITE_TOKEN&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
ZYXEL_SNMP_USER=&#039;&amp;lt;SNMP_USER&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_AUTH=&#039;&amp;lt;AUTH_PASSWORD&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_PRIV=&#039;&amp;lt;PRIV_PASSWORD&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
QNAP_SNMP_USER=&#039;&amp;lt;QNAP_SNMP_USER&amp;gt;&#039;&lt;br /&gt;
QNAP_SNMP_AUTH=&#039;&amp;lt;QNAP_AUTH_PASSWORD&amp;gt;&#039;&lt;br /&gt;
QNAP_SNMP_PRIV=&#039;&amp;lt;QNAP_PRIV_PASSWORD&amp;gt;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
권한 제한:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chown root:root /etc/telegraf/monitor.env&lt;br /&gt;
chmod 600 /etc/telegraf/monitor.env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
systemd가 환경 파일을 읽도록 설정:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -d -m 755 \&lt;br /&gt;
  /etc/systemd/system/telegraf.service.d&lt;br /&gt;
&lt;br /&gt;
vi /etc/systemd/system/telegraf.service.d/10-monitor-env.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
EnvironmentFile=/etc/telegraf/monitor.env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Telegraf Main 설정 ===&lt;br /&gt;
&lt;br /&gt;
원본 백업:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
cp -a /etc/telegraf/telegraf.conf \&lt;br /&gt;
  /etc/telegraf/telegraf.conf.orig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
편집:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/telegraf/telegraf.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
기본 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
  interval = &amp;quot;30s&amp;quot;&lt;br /&gt;
  round_interval = true&lt;br /&gt;
  flush_interval = &amp;quot;5s&amp;quot;&lt;br /&gt;
  precision = &amp;quot;1ms&amp;quot;&lt;br /&gt;
  metric_batch_size = 1000&lt;br /&gt;
  metric_buffer_limit = 20000&lt;br /&gt;
  omit_hostname = false&lt;br /&gt;
  snmp_translator = &amp;quot;gosmi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[outputs.influxdb_v2]]&lt;br /&gt;
  urls = [&amp;quot;http://127.0.0.1:8086&amp;quot;]&lt;br /&gt;
  token = &amp;quot;${INFLUX_WRITE_TOKEN}&amp;quot;&lt;br /&gt;
  organization = &amp;quot;network&amp;quot;&lt;br /&gt;
  bucket = &amp;quot;snmp_raw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[inputs.internal]]&lt;br /&gt;
&lt;br /&gt;
[[inputs.cpu]]&lt;br /&gt;
  percpu = false&lt;br /&gt;
  totalcpu = true&lt;br /&gt;
&lt;br /&gt;
[[inputs.mem]]&lt;br /&gt;
&lt;br /&gt;
[[inputs.disk]]&lt;br /&gt;
  mount_points = [&amp;quot;/&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[inputs.net]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
각 값의 의미:&lt;br /&gt;
&lt;br /&gt;
* interval = 30s : 기본 수집 주기&lt;br /&gt;
* flush_interval = 5s : 모아둔 Metric을 DB에 보내는 주기&lt;br /&gt;
* outputs.influxdb_v2 : 수집 결과를 어느 InfluxDB에 저장할지 지정&lt;br /&gt;
* inputs.internal : Telegraf 자신의 상태&lt;br /&gt;
* inputs.cpu/mem/disk/net : 모니터링 서버 자체 상태&lt;br /&gt;
&lt;br /&gt;
== 8. SNMP가 정상인지 먼저 수동으로 확인 ==&lt;br /&gt;
&lt;br /&gt;
Telegraf 설정 전에 SNMP 자체가 되는지 확인하는 것이 중요하다.&lt;br /&gt;
&lt;br /&gt;
Telegraf가 안 된다고 바로 Telegraf 설정만 수정하면 실제 원인이 SNMP ACL인지 Password인지 구분하기 어렵다.&lt;br /&gt;
&lt;br /&gt;
=== 8.1 SNMPv3 계정 파일 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -d -m 700 /root/.snmp&lt;br /&gt;
&lt;br /&gt;
vi /root/.snmp/snmp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
defVersion 3&lt;br /&gt;
defSecurityName &amp;lt;SNMP_USER&amp;gt;&lt;br /&gt;
defSecurityLevel authPriv&lt;br /&gt;
defAuthType SHA&lt;br /&gt;
defAuthPassphrase &amp;lt;SNMP_AUTH_PASSWORD&amp;gt;&lt;br /&gt;
defPrivType AES&lt;br /&gt;
defPrivPassphrase &amp;lt;SNMP_PRIV_PASSWORD&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
권한:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chmod 600 /root/.snmp/snmp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8.2 Uptime 조회 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
snmpget -v3 \&lt;br /&gt;
  -t 2 \&lt;br /&gt;
  -r 0 \&lt;br /&gt;
  -On \&lt;br /&gt;
  203.0.113.11 \&lt;br /&gt;
  .1.3.6.1.2.1.1.3.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
응답이 나오면 최소한 다음이 정상이다.&lt;br /&gt;
&lt;br /&gt;
* IP Routing&lt;br /&gt;
* UDP/161&lt;br /&gt;
* SNMP User&lt;br /&gt;
* Authentication&lt;br /&gt;
* Privacy Password&lt;br /&gt;
* SNMP View&lt;br /&gt;
&lt;br /&gt;
=== 8.3 Interface 이름 확인 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
snmpwalk -v3 \&lt;br /&gt;
  -t 2 \&lt;br /&gt;
  -r 0 \&lt;br /&gt;
  -On \&lt;br /&gt;
  203.0.113.11 \&lt;br /&gt;
  .1.3.6.1.2.1.31.1.1.1.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서 마지막 숫자가 ifIndex이다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 결과가 다음과 같다고 가정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.2.1.31.1.1.1.1.24 = STRING: port24&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 경우 ifIndex는 24이다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;중요:&#039;&#039;&#039; 물리 Port 24번이 항상 ifIndex 24라는 의미는 아니다. 실제 SNMP 결과를 기준으로 한다.&lt;br /&gt;
&lt;br /&gt;
== 9. Telegraf SNMP 설정 ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1 모델별 파일로 나누는 이유 ===&lt;br /&gt;
&lt;br /&gt;
제조사가 같아도 모델마다 CPU/Memory OID와 SNMP 암호화 방식이 다를 수 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 하나의 거대한 파일보다는 모델별 파일로 나눈다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/etc/telegraf/telegraf.d/&lt;br /&gt;
├── 10-zyxel-gs1900.conf&lt;br /&gt;
├── 11-zyxel-gs1920.conf&lt;br /&gt;
├── 20-zyxel-es3128.conf&lt;br /&gt;
├── 30-icmp_check.conf&lt;br /&gt;
└── 40-qnap_nas.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9.2 GS1920 계열 ===&lt;br /&gt;
&lt;br /&gt;
실제 확인된 특성:&lt;br /&gt;
&lt;br /&gt;
* SNMPv3 SHA + DES&lt;br /&gt;
* CPU/Memory Private OID 사용&lt;br /&gt;
&lt;br /&gt;
CPU:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.4.1.890.1.15.3.49.1.7.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Total   .1.3.6.1.4.1.890.1.15.3.50.1.1.1.3.1&lt;br /&gt;
Used    .1.3.6.1.4.1.890.1.15.3.50.1.1.1.4.1&lt;br /&gt;
Percent .1.3.6.1.4.1.890.1.15.3.50.1.1.1.5.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9.3 GS1900 계열 ===&lt;br /&gt;
&lt;br /&gt;
CPU:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.4.1.890.1.15.3.2.4.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.4.1.890.1.15.3.2.5.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실제 구축 과정에서는 SNMP 응답이 느려 다음 값이 안정적이었다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
timeout = &amp;quot;5s&amp;quot;&lt;br /&gt;
retries = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;왜 Timeout을 늘렸는가?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
수동 snmpget은 되는데 Telegraf에서만 간헐적으로 누락된다면 Telegraf timeout이 장비 응답시간보다 짧을 수 있다.&lt;br /&gt;
&lt;br /&gt;
Timeout을 무조건 크게 설정하기보다는 실제 응답을 보고 조정한다.&lt;br /&gt;
&lt;br /&gt;
=== 9.4 ES-3128GP ===&lt;br /&gt;
&lt;br /&gt;
실제 확인된 SNMPv3 방식:&lt;br /&gt;
&lt;br /&gt;
* SHA&lt;br /&gt;
* AES&lt;br /&gt;
&lt;br /&gt;
sysObjectID:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.4.1.7800.1.190&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Port Metric은 수집 가능하지만 CPU/Memory Private OID는 정상 확인되지 않아 Dashboard에서 억지로 0으로 표시하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;수집되지 않는 값과 0은 의미가 다르다.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
CPU를 조회할 수 없는 장비에 CPU 0%라고 표시하면 운영자가 정상 상태라고 오해할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 9.5 기본 Port Metric ===&lt;br /&gt;
&lt;br /&gt;
가능하면 제조사 Private MIB보다 표준 IF-MIB를 먼저 사용한다.&lt;br /&gt;
&lt;br /&gt;
주요 항목:&lt;br /&gt;
&lt;br /&gt;
* ifName&lt;br /&gt;
* ifAlias&lt;br /&gt;
* ifSpeed&lt;br /&gt;
* ifHCInOctets&lt;br /&gt;
* ifHCOutOctets&lt;br /&gt;
* ifOperStatus&lt;br /&gt;
* ifInErrors&lt;br /&gt;
* ifOutErrors&lt;br /&gt;
* ifInDiscards&lt;br /&gt;
* ifOutDiscards&lt;br /&gt;
* Broadcast&lt;br /&gt;
* Multicast&lt;br /&gt;
&lt;br /&gt;
== 10. ICMP Ping 수집 ==&lt;br /&gt;
&lt;br /&gt;
SNMP가 정상이어도 장비 자체가 네트워크에서 사라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 Ping 결과도 별도로 저장한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/telegraf/telegraf.d/30-icmp_check.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[[inputs.ping]]&lt;br /&gt;
  urls = [&lt;br /&gt;
    &amp;quot;203.0.113.11&amp;quot;,&lt;br /&gt;
    &amp;quot;203.0.113.12&amp;quot;,&lt;br /&gt;
    &amp;quot;203.0.113.13&amp;quot;&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
  method = &amp;quot;native&amp;quot;&lt;br /&gt;
  count = 3&lt;br /&gt;
  deadline = 2.0&lt;br /&gt;
  interval = 10.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10.1 CAP_NET_RAW가 필요한 이유 ===&lt;br /&gt;
&lt;br /&gt;
native Ping은 Raw Socket을 사용한다.&lt;br /&gt;
&lt;br /&gt;
root로 telegraf --test를 실행하면 정상인데 systemd 서비스에서는 Ping이 실패할 수 있다.&lt;br /&gt;
&lt;br /&gt;
이 경우 서비스에 CAP_NET_RAW를 부여한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl edit telegraf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
CapabilityBoundingSet=CAP_NET_RAW&lt;br /&gt;
AmbientCapabilities=CAP_NET_RAW&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
반영:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl restart telegraf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 11. Telegraf 설정 검사 ==&lt;br /&gt;
&lt;br /&gt;
서비스를 재시작하기 전에 설정 오류를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
telegraf \&lt;br /&gt;
  --config /etc/telegraf/telegraf.conf \&lt;br /&gt;
  --config-directory /etc/telegraf/telegraf.d \&lt;br /&gt;
  --test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; --test는 Metric을 화면에 출력하지만 일반적으로 Output 저장까지 검증하는 용도가 아니다.&lt;br /&gt;
&lt;br /&gt;
서비스 계정 조건까지 확인하려면 다음 방식이 더 정확하다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemd-run \&lt;br /&gt;
  --unit=telegraf-config-check \&lt;br /&gt;
  --wait \&lt;br /&gt;
  --pipe \&lt;br /&gt;
  --collect \&lt;br /&gt;
  -p User=telegraf \&lt;br /&gt;
  -p Group=telegraf \&lt;br /&gt;
  -p EnvironmentFile=/etc/telegraf/monitor.env \&lt;br /&gt;
  -p CapabilityBoundingSet=CAP_NET_RAW \&lt;br /&gt;
  -p AmbientCapabilities=CAP_NET_RAW \&lt;br /&gt;
  /usr/bin/telegraf \&lt;br /&gt;
  --config /etc/telegraf/telegraf.conf \&lt;br /&gt;
  --config-directory /etc/telegraf/telegraf.d \&lt;br /&gt;
  --test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
정상 후 서비스 시작:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl enable --now telegraf&lt;br /&gt;
systemctl restart telegraf&lt;br /&gt;
&lt;br /&gt;
systemctl status telegraf --no-pager&lt;br /&gt;
&lt;br /&gt;
journalctl -u telegraf \&lt;br /&gt;
  -n 100 \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
로그에서 주의할 문자열:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
timeout&lt;br /&gt;
unauthorized&lt;br /&gt;
permission denied&lt;br /&gt;
buffer&lt;br /&gt;
drop&lt;br /&gt;
address already in use&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 12. Grafana 설치 후 처음 해야 할 작업 ==&lt;br /&gt;
&lt;br /&gt;
Grafana는 데이터를 직접 수집하지 않는다.&lt;br /&gt;
&lt;br /&gt;
먼저 InfluxDB와 Prometheus 같은 데이터소스를 등록해야 한다.&lt;br /&gt;
&lt;br /&gt;
=== 12.1 Grafana 서비스 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl enable --now grafana-server&lt;br /&gt;
&lt;br /&gt;
systemctl status grafana-server --no-pager&lt;br /&gt;
&lt;br /&gt;
curl -fsS \&lt;br /&gt;
  http://127.0.0.1:3000/api/health&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
웹 접속:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
http://192.0.2.10:3000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부망에서만 사용할 경우에도 방화벽 접근 범위를 관리망으로 제한하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
=== 12.2 InfluxDB Datasource 등록 ===&lt;br /&gt;
&lt;br /&gt;
Grafana 메뉴:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Connections&lt;br /&gt;
→ Data sources&lt;br /&gt;
→ Add data source&lt;br /&gt;
→ InfluxDB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
설정:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 값&lt;br /&gt;
|-&lt;br /&gt;
| Query Language&lt;br /&gt;
| Flux&lt;br /&gt;
|-&lt;br /&gt;
| URL&lt;br /&gt;
| http://127.0.0.1:8086&lt;br /&gt;
|-&lt;br /&gt;
| Organization&lt;br /&gt;
| network&lt;br /&gt;
|-&lt;br /&gt;
| Token&lt;br /&gt;
| grafana-read Token&lt;br /&gt;
|-&lt;br /&gt;
| Default Bucket&lt;br /&gt;
| snmp_raw&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save &amp;amp; Test 성공 여부를 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 13. 첫 번째 SNMP Dashboard 만들기 ==&lt;br /&gt;
&lt;br /&gt;
처음부터 모든 장비를 한 화면에 넣지 않는다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;한 대의 스위치 + 한 포트&#039;&#039;&#039;로 정상 그래프를 만든 뒤 확대하는 것이 가장 쉽다.&lt;br /&gt;
&lt;br /&gt;
=== 13.1 원시 Counter 확인 ===&lt;br /&gt;
&lt;br /&gt;
Explore에서 다음과 같이 최근 데이터를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: -10m)&lt;br /&gt;
  |&amp;gt; limit(n: 20)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서 실제 Measurement, source, index, if_name 값을 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 13.2 Port RX/TX 계산 ===&lt;br /&gt;
&lt;br /&gt;
누적 Octet Counter를 bps로 변환한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: v.timeRangeStart, stop: v.timeRangeStop)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
      r._measurement == &amp;quot;switch_port&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
      r.source == &amp;quot;203.0.113.11&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
      r._field == &amp;quot;in_octets&amp;quot; or&lt;br /&gt;
      r._field == &amp;quot;out_octets&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; derivative(&lt;br /&gt;
      unit: 1s,&lt;br /&gt;
      nonNegative: true&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; map(fn: (r) =&amp;gt; ({&lt;br /&gt;
      r with&lt;br /&gt;
      _value: r._value * 8.0&lt;br /&gt;
  }))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Grafana Unit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
bits/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 13.3 Error / Discard ===&lt;br /&gt;
&lt;br /&gt;
Error나 Discard 역시 Counter이므로 증가율을 표시한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: v.timeRangeStart, stop: v.timeRangeStop)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
      r._measurement == &amp;quot;switch_port&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
      r._field == &amp;quot;in_errors&amp;quot; or&lt;br /&gt;
      r._field == &amp;quot;out_errors&amp;quot; or&lt;br /&gt;
      r._field == &amp;quot;in_discards&amp;quot; or&lt;br /&gt;
      r._field == &amp;quot;out_discards&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; derivative(&lt;br /&gt;
      unit: 1s,&lt;br /&gt;
      nonNegative: true&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;해석&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Error 증가 → 물리계층, Frame, Interface 문제 가능&lt;br /&gt;
* Discard 증가 → Queue, Buffer, QoS, 혼잡 등에 의해 폐기될 가능성&lt;br /&gt;
* 값이 0인 상태가 일반적이지만 장비 특성과 Traffic에 따라 해석해야 함&lt;br /&gt;
&lt;br /&gt;
=== 13.4 operStatus ===&lt;br /&gt;
&lt;br /&gt;
operStatus는 Counter가 아니다.&lt;br /&gt;
&lt;br /&gt;
따라서 derivative를 사용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
일반적인 값:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
1 = up&lt;br /&gt;
2 = down&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Grafana Value Mapping으로 사람이 읽기 쉬운 문자열로 변환한다.&lt;br /&gt;
&lt;br /&gt;
== 14. Prometheus를 추가하는 이유 ==&lt;br /&gt;
&lt;br /&gt;
SNMP는 네트워크 장비 상태에 좋지만 Linux/Windows 서버 자원 모니터링에는 Exporter + Prometheus가 더 편하다.&lt;br /&gt;
&lt;br /&gt;
Prometheus 구조:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Node Exporter ----\&lt;br /&gt;
                   \&lt;br /&gt;
Windows Exporter ---&amp;gt; Prometheus ---&amp;gt; Grafana&lt;br /&gt;
                   /&lt;br /&gt;
QNAP Exporter -----/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prometheus는 일정 주기마다 Exporter HTTP Endpoint에 접속하여 Metric을 가져간다.&lt;br /&gt;
&lt;br /&gt;
이를 &#039;&#039;&#039;Pull 방식&#039;&#039;&#039;이라고 한다.&lt;br /&gt;
&lt;br /&gt;
== 15. Prometheus 설치 ==&lt;br /&gt;
&lt;br /&gt;
=== 15.1 사용자와 디렉터리 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
useradd \&lt;br /&gt;
  --system \&lt;br /&gt;
  --no-create-home \&lt;br /&gt;
  --shell /sbin/nologin \&lt;br /&gt;
  prometheus&lt;br /&gt;
&lt;br /&gt;
install -d \&lt;br /&gt;
  -o prometheus \&lt;br /&gt;
  -g prometheus \&lt;br /&gt;
  /etc/prometheus \&lt;br /&gt;
  /var/lib/prometheus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prometheus 공식 바이너리를 준비한 뒤:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -m 0755 \&lt;br /&gt;
  prometheus \&lt;br /&gt;
  /usr/local/bin/prometheus&lt;br /&gt;
&lt;br /&gt;
install -m 0755 \&lt;br /&gt;
  promtool \&lt;br /&gt;
  /usr/local/bin/promtool&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
버전 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
prometheus --version&lt;br /&gt;
promtool --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 15.2 prometheus.yml ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/prometheus/prometheus.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
global:&lt;br /&gt;
  scrape_interval: 30s&lt;br /&gt;
&lt;br /&gt;
scrape_configs:&lt;br /&gt;
&lt;br /&gt;
  - job_name: prometheus&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;127.0.0.1:9090&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: monitoring-server&lt;br /&gt;
&lt;br /&gt;
  - job_name: node&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;127.0.0.1:9100&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: monitoring-server&lt;br /&gt;
&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;192.0.2.20:9100&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: linux-server&lt;br /&gt;
&lt;br /&gt;
  - job_name: windows&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;192.0.2.30:9182&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: windows-server&lt;br /&gt;
&lt;br /&gt;
  - job_name: qnap&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;198.51.100.10:9100&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: nas-01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;scrape_interval = 30s&#039;&#039;&#039;는 Prometheus가 30초마다 각 Target을 조회한다는 의미이다.&lt;br /&gt;
&lt;br /&gt;
=== 15.3 설정 검사 ===&lt;br /&gt;
&lt;br /&gt;
YAML은 들여쓰기에 매우 민감하다.&lt;br /&gt;
&lt;br /&gt;
실제 구축 중에도 job을 scrape_configs 바깥에 잘못 넣으면 Prometheus가 시작하지 못했다.&lt;br /&gt;
&lt;br /&gt;
반드시 검사한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
promtool check config \&lt;br /&gt;
  /etc/prometheus/prometheus.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 15.4 systemd 등록 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/systemd/system/prometheus.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Prometheus&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
After=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
User=prometheus&lt;br /&gt;
Group=prometheus&lt;br /&gt;
&lt;br /&gt;
ExecStart=/usr/local/bin/prometheus \&lt;br /&gt;
  --config.file=/etc/prometheus/prometheus.yml \&lt;br /&gt;
  --storage.tsdb.path=/var/lib/prometheus \&lt;br /&gt;
  --storage.tsdb.retention.time=30d \&lt;br /&gt;
  --storage.tsdb.retention.size=20GB \&lt;br /&gt;
  --web.listen-address=127.0.0.1:9090&lt;br /&gt;
&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
권한:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chown -R prometheus:prometheus \&lt;br /&gt;
  /etc/prometheus \&lt;br /&gt;
  /var/lib/prometheus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
시작:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now prometheus&lt;br /&gt;
&lt;br /&gt;
systemctl status prometheus --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Health:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -s \&lt;br /&gt;
  http://127.0.0.1:9090/-/healthy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 16. Linux Node Exporter 설치 ==&lt;br /&gt;
&lt;br /&gt;
=== 16.1 Node Exporter가 하는 일 ===&lt;br /&gt;
&lt;br /&gt;
Node Exporter는 Linux Kernel과 /proc, /sys 등의 정보를 읽어 Prometheus 형식으로 공개한다.&lt;br /&gt;
&lt;br /&gt;
대표 Metric:&lt;br /&gt;
&lt;br /&gt;
* CPU&lt;br /&gt;
* Memory&lt;br /&gt;
* Load&lt;br /&gt;
* Filesystem&lt;br /&gt;
* Disk I/O&lt;br /&gt;
* Network Traffic&lt;br /&gt;
* Network Error/Drop&lt;br /&gt;
* Uptime&lt;br /&gt;
* File Descriptor&lt;br /&gt;
* 일부 Hardware Metric&lt;br /&gt;
&lt;br /&gt;
=== 16.2 서비스 계정 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
useradd \&lt;br /&gt;
  --system \&lt;br /&gt;
  --no-create-home \&lt;br /&gt;
  --shell /sbin/nologin \&lt;br /&gt;
  node_exporter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
바이너리 설치:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -m 0755 \&lt;br /&gt;
  node_exporter \&lt;br /&gt;
  /usr/local/bin/node_exporter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16.3 systemd ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/systemd/system/node_exporter.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Node Exporter&lt;br /&gt;
After=network-online.target&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
User=node_exporter&lt;br /&gt;
Group=node_exporter&lt;br /&gt;
&lt;br /&gt;
ExecStart=/usr/local/bin/node_exporter&lt;br /&gt;
&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now node_exporter&lt;br /&gt;
&lt;br /&gt;
systemctl status node_exporter --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Metric 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -s \&lt;br /&gt;
  http://127.0.0.1:9100/metrics \&lt;br /&gt;
  | head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다른 서버에 설치한 경우 Prometheus 서버에서 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -s \&lt;br /&gt;
  http://192.0.2.20:9100/metrics \&lt;br /&gt;
  | head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;정상 확인&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Metric 문자열이 여러 줄 출력되면 Exporter 자체는 정상이다.&lt;br /&gt;
&lt;br /&gt;
Prometheus에서 다음 Query도 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
값:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
1 = 정상 Scrape&lt;br /&gt;
0 = Scrape 실패&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 17. Windows Exporter ==&lt;br /&gt;
&lt;br /&gt;
Windows에서는 windows_exporter를 설치한다.&lt;br /&gt;
&lt;br /&gt;
기본 Port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
9182/tcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prometheus에서 다음 주소를 조회할 수 있어야 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
http://192.0.2.30:9182/metrics&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows PowerShell 테스트:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Invoke-WebRequest \&lt;br /&gt;
  -UseBasicParsing \&lt;br /&gt;
  http://127.0.0.1:9182/metrics&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
성능 카운터가 비정상인 경우 실제 구축 과정에서 다음 복구 절차를 사용하였다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
lodctr /R&lt;br /&gt;
winmgmt /resyncperf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
그 후:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Restart-Service windows_exporter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 18. Grafana에 Prometheus 등록 ==&lt;br /&gt;
&lt;br /&gt;
Grafana 메뉴:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Connections&lt;br /&gt;
→ Data sources&lt;br /&gt;
→ Prometheus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
http://127.0.0.1:9090&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save &amp;amp; Test 후 Explore에서:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Target별 1이 표시되면 정상이다.&lt;br /&gt;
&lt;br /&gt;
== 19. Linux Server Dashboard 이해하기 ==&lt;br /&gt;
&lt;br /&gt;
처음에는 다음 항목만 만든다.&lt;br /&gt;
&lt;br /&gt;
* Uptime&lt;br /&gt;
* CPU&lt;br /&gt;
* Memory&lt;br /&gt;
* Load Average&lt;br /&gt;
* Filesystem&lt;br /&gt;
* Network RX/TX&lt;br /&gt;
&lt;br /&gt;
이후 익숙해지면 다음을 추가한다.&lt;br /&gt;
&lt;br /&gt;
* Disk I/O&lt;br /&gt;
* Network Error/Drop&lt;br /&gt;
* inode&lt;br /&gt;
* Swap&lt;br /&gt;
* Process&lt;br /&gt;
* Application Log&lt;br /&gt;
&lt;br /&gt;
=== 19.1 CPU Usage ===&lt;br /&gt;
&lt;br /&gt;
Node Exporter는 CPU 시간을 Mode별 누적으로 제공한다.&lt;br /&gt;
&lt;br /&gt;
idle을 제외한 비율로 CPU 사용률을 계산할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
100 - (&lt;br /&gt;
  avg by(instance) (&lt;br /&gt;
    rate(&lt;br /&gt;
      node_cpu_seconds_total{&lt;br /&gt;
        mode=&amp;quot;idle&amp;quot;&lt;br /&gt;
      }[5m]&lt;br /&gt;
    )&lt;br /&gt;
  ) * 100&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 19.2 Memory Usage ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
100 * (&lt;br /&gt;
  1 -&lt;br /&gt;
  node_memory_MemAvailable_bytes&lt;br /&gt;
  /&lt;br /&gt;
  node_memory_MemTotal_bytes&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 19.3 Filesystem Usage ===&lt;br /&gt;
&lt;br /&gt;
Filesystem은 tmpfs, overlay, snapshot 등 운영자가 원하지 않는 Mount가 함께 보일 수 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 실제 데이터 Mount Point를 확인한 뒤 필터링한다.&lt;br /&gt;
&lt;br /&gt;
== 20. QNAP TS-264 모니터링 ==&lt;br /&gt;
&lt;br /&gt;
QNAP은 한 가지 수집 방식만 사용하면 정보가 부족하다.&lt;br /&gt;
&lt;br /&gt;
따라서 세 경로를 함께 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
QNAP&lt;br /&gt;
 |&lt;br /&gt;
 +-- node_exporter --&amp;gt; Prometheus&lt;br /&gt;
 |&lt;br /&gt;
 +-- SNMP ----------&amp;gt; Telegraf --&amp;gt; InfluxDB&lt;br /&gt;
 |&lt;br /&gt;
 +-- Syslog --------&amp;gt; rsyslog --&amp;gt; Alloy --&amp;gt; Loki&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
역할:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 데이터 소스&lt;br /&gt;
|-&lt;br /&gt;
| CPU / Memory / Network&lt;br /&gt;
| Node Exporter&lt;br /&gt;
|-&lt;br /&gt;
| Filesystem&lt;br /&gt;
| Node Exporter&lt;br /&gt;
|-&lt;br /&gt;
| Disk I/O&lt;br /&gt;
| Node Exporter&lt;br /&gt;
|-&lt;br /&gt;
| HDD Model / 온도 / 상태&lt;br /&gt;
| SNMP&lt;br /&gt;
|-&lt;br /&gt;
| RAID / Volume&lt;br /&gt;
| SNMP&lt;br /&gt;
|-&lt;br /&gt;
| Event Log&lt;br /&gt;
| Syslog&lt;br /&gt;
|-&lt;br /&gt;
| Access Log&lt;br /&gt;
| Syslog&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 20.1 QNAP SNMPv3 ===&lt;br /&gt;
&lt;br /&gt;
실제 TS-264 환경에서는 다음 조합을 사용하였다.&lt;br /&gt;
&lt;br /&gt;
* Authentication: SHA&lt;br /&gt;
* Privacy: DES&lt;br /&gt;
&lt;br /&gt;
QNAP은 해당 구성에서 AES가 동작하지 않았다.&lt;br /&gt;
&lt;br /&gt;
따라서 다른 장비에서 AES가 된다는 이유로 QNAP도 AES라고 가정하지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 20.2 주요 Measurement ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
QNAP_TS264&lt;br /&gt;
qnap_disk&lt;br /&gt;
qnap_raid&lt;br /&gt;
qnap_storage_pool&lt;br /&gt;
qnap_volume&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20.3 Volume 값이 11 GiB로 잘못 보이는 문제 ===&lt;br /&gt;
&lt;br /&gt;
실제 QTS에서 DataVol1은 약 11.33 TiB인데 SNMP 원시값을 Grafana에서 byte로 바로 처리하면 약 11.3 GiB로 표시되는 문제가 있었다.&lt;br /&gt;
&lt;br /&gt;
실제 장비의 qnap_volume capacity/free 값이 KiB 성격으로 반환되어 1024 배 보정이 필요하였다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
|&amp;gt; map(fn: (r) =&amp;gt; ({&lt;br /&gt;
    r with&lt;br /&gt;
&lt;br /&gt;
    capacity_bytes:&lt;br /&gt;
      uint(v: r.capacity_bytes)&lt;br /&gt;
      * uint(v: 1024),&lt;br /&gt;
&lt;br /&gt;
    free_bytes:&lt;br /&gt;
      uint(v: r.free_bytes)&lt;br /&gt;
      * uint(v: 1024),&lt;br /&gt;
&lt;br /&gt;
    used_bytes:&lt;br /&gt;
      (&lt;br /&gt;
        uint(v: r.capacity_bytes)&lt;br /&gt;
        - uint(v: r.free_bytes)&lt;br /&gt;
      )&lt;br /&gt;
      * uint(v: 1024),&lt;br /&gt;
&lt;br /&gt;
    used_percent:&lt;br /&gt;
      if float(v: r.capacity_bytes) &amp;gt; 0.0 then&lt;br /&gt;
        (&lt;br /&gt;
          float(v: r.capacity_bytes)&lt;br /&gt;
          - float(v: r.free_bytes)&lt;br /&gt;
        )&lt;br /&gt;
        /&lt;br /&gt;
        float(v: r.capacity_bytes)&lt;br /&gt;
        * 100.0&lt;br /&gt;
      else&lt;br /&gt;
        0.0&lt;br /&gt;
}))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;왜 Percent에는 1024가 필요 없는가?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
분자와 분모가 같은 단위이므로 비율 계산에서는 단위가 상쇄된다.&lt;br /&gt;
&lt;br /&gt;
=== 20.4 실제 Data Volume 찾기 ===&lt;br /&gt;
&lt;br /&gt;
Node Exporter가 QNAP 내부의 Snapshot Mount까지 모두 보여주므로 처음에는 여러 개의 11.33 TiB Filesystem이 보일 수 있다.&lt;br /&gt;
&lt;br /&gt;
실제 사용자 Data Volume은 다음이었다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mountpoint=&amp;quot;/share/CACHEDEV1_DATA&amp;quot;&lt;br /&gt;
device=&amp;quot;/dev/mapper/cachedev1&amp;quot;&lt;br /&gt;
fstype=&amp;quot;ext4&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QNAP Snapshot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/mnt/snapshot/1/10001&lt;br /&gt;
/mnt/snapshot/1/10002&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dashboard에서는 Snapshot을 제외하고 실제 Volume만 표시한다.&lt;br /&gt;
&lt;br /&gt;
사용률:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
100 * (&lt;br /&gt;
  1 -&lt;br /&gt;
  node_filesystem_avail_bytes{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    mountpoint=&amp;quot;/share/CACHEDEV1_DATA&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  /&lt;br /&gt;
  node_filesystem_size_bytes{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    mountpoint=&amp;quot;/share/CACHEDEV1_DATA&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실제 QTS 화면과 약 2.86%로 일치하는 것을 확인하였다.&lt;br /&gt;
&lt;br /&gt;
=== 20.5 QNAP Network는 bond0만 표시 ===&lt;br /&gt;
&lt;br /&gt;
QNAP에는 내부 Interface와 Virtual Interface가 여러 개 보일 수 있다.&lt;br /&gt;
&lt;br /&gt;
실제 외부 Traffic을 담당하는 bond0만 필터링한다.&lt;br /&gt;
&lt;br /&gt;
RX:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_network_receive_bytes_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
) * 8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TX:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_network_transmit_bytes_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
) * 8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20.6 Network Error / Drop ===&lt;br /&gt;
&lt;br /&gt;
RX Error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_network_receive_errs_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TX Error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_network_transmit_errs_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RX Drop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_network_receive_drop_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TX Drop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_network_transmit_drop_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20.7 Disk I/O ===&lt;br /&gt;
&lt;br /&gt;
QNAP에는 md, dm, loop 등 내부 Device가 많으므로 물리 Disk sd*만 표시한다.&lt;br /&gt;
&lt;br /&gt;
Read Bytes/sec:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_disk_read_bytes_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=~&amp;quot;sd[a-z]+&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Write Bytes/sec:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_disk_written_bytes_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=~&amp;quot;sd[a-z]+&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read IOPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_disk_reads_completed_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=~&amp;quot;sd[a-z]+&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Write IOPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_disk_writes_completed_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=~&amp;quot;sd[a-z]+&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 21. Syslog를 왜 별도로 구성하는가 ==&lt;br /&gt;
&lt;br /&gt;
Metric만으로는 다음과 같은 내용을 알기 어렵다.&lt;br /&gt;
&lt;br /&gt;
* Port가 왜 Down 되었는가&lt;br /&gt;
* 사용자가 NAS에 어떤 파일을 접근했는가&lt;br /&gt;
* 서비스가 언제 재시작되었는가&lt;br /&gt;
* 인증 실패가 발생했는가&lt;br /&gt;
&lt;br /&gt;
이런 이벤트는 Log가 필요하다.&lt;br /&gt;
&lt;br /&gt;
본 구성의 로그 흐름:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Device&lt;br /&gt;
  |&lt;br /&gt;
  | Syslog&lt;br /&gt;
  v&lt;br /&gt;
rsyslog&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Log File&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Alloy&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Loki&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Grafana&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 22. rsyslog 구성 ==&lt;br /&gt;
&lt;br /&gt;
=== 22.1 Network Syslog ===&lt;br /&gt;
&lt;br /&gt;
네트워크 장비 로그:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/var/log/network-syslog/events.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
기본 수신:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
TCP/UDP 514&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 22.2 Server Syslog ===&lt;br /&gt;
&lt;br /&gt;
서버용 로그를 네트워크 장비와 분리하면 Grafana에서 Query하기 쉽다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/var/log/server-syslog/events.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
수신 Port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
TCP 5514&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 22.3 QNAP Event와 Access Log 분리 ===&lt;br /&gt;
&lt;br /&gt;
QNAP QuLog의 두 성격이 다르므로 포트부터 분리한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 종류&lt;br /&gt;
! 포트&lt;br /&gt;
! 파일&lt;br /&gt;
! 의미&lt;br /&gt;
|-&lt;br /&gt;
| Event&lt;br /&gt;
| TCP 5515&lt;br /&gt;
| /var/log/qnap/event.log&lt;br /&gt;
| 시스템/서비스 이벤트&lt;br /&gt;
|-&lt;br /&gt;
| Access&lt;br /&gt;
| TCP 5516&lt;br /&gt;
| /var/log/qnap/access.log&lt;br /&gt;
| 사용자/파일 접근&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
template(name=&amp;quot;QnapSyslogLine&amp;quot; type=&amp;quot;string&amp;quot;&lt;br /&gt;
  string=&amp;quot;%timegenerated:::date-rfc3339% src=%fromhost-ip% severity=%syslogseverity-text% host=%hostname% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이렇게 저장하면 한 줄이 대략 다음 구조가 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
2026-09-13T23:40:03+09:00 \&lt;br /&gt;
src=198.51.100.10 \&lt;br /&gt;
severity=info \&lt;br /&gt;
host=nas-01 \&lt;br /&gt;
qulogd: ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Event ruleset:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ruleset(name=&amp;quot;QnapEventLog&amp;quot;) {&lt;br /&gt;
&lt;br /&gt;
    action(&lt;br /&gt;
        type=&amp;quot;omfile&amp;quot;&lt;br /&gt;
        file=&amp;quot;/var/log/qnap/event.log&amp;quot;&lt;br /&gt;
        template=&amp;quot;QnapSyslogLine&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        fileOwner=&amp;quot;root&amp;quot;&lt;br /&gt;
        fileGroup=&amp;quot;alloy&amp;quot;&lt;br /&gt;
        fileCreateMode=&amp;quot;0640&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        dirOwner=&amp;quot;root&amp;quot;&lt;br /&gt;
        dirGroup=&amp;quot;alloy&amp;quot;&lt;br /&gt;
        dirCreateMode=&amp;quot;0750&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        createDirs=&amp;quot;on&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    stop&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
input(&lt;br /&gt;
    type=&amp;quot;imtcp&amp;quot;&lt;br /&gt;
    port=&amp;quot;5515&amp;quot;&lt;br /&gt;
    ruleset=&amp;quot;QnapEventLog&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Access ruleset:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ruleset(name=&amp;quot;QnapAccessLog&amp;quot;) {&lt;br /&gt;
&lt;br /&gt;
    action(&lt;br /&gt;
        type=&amp;quot;omfile&amp;quot;&lt;br /&gt;
        file=&amp;quot;/var/log/qnap/access.log&amp;quot;&lt;br /&gt;
        template=&amp;quot;QnapSyslogLine&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        fileOwner=&amp;quot;root&amp;quot;&lt;br /&gt;
        fileGroup=&amp;quot;alloy&amp;quot;&lt;br /&gt;
        fileCreateMode=&amp;quot;0640&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        dirOwner=&amp;quot;root&amp;quot;&lt;br /&gt;
        dirGroup=&amp;quot;alloy&amp;quot;&lt;br /&gt;
        dirCreateMode=&amp;quot;0750&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        createDirs=&amp;quot;on&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    stop&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
input(&lt;br /&gt;
    type=&amp;quot;imtcp&amp;quot;&lt;br /&gt;
    port=&amp;quot;5516&amp;quot;&lt;br /&gt;
    ruleset=&amp;quot;QnapAccessLog&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 22.4 rsyslog 설정 검사 ===&lt;br /&gt;
&lt;br /&gt;
재시작 전에 반드시 검사한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rsyslogd -N1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
오류가 없으면:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl restart rsyslog&lt;br /&gt;
&lt;br /&gt;
ss -lntp \&lt;br /&gt;
  | grep -E &#039;:5514|:5515|:5516&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실제 로그 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
tail -f \&lt;br /&gt;
  /var/log/qnap/access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;문제 분리 방법&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
tcpdump에는 Packet이 안 보임&lt;br /&gt;
→ 장비 송신/방화벽/라우팅 확인&lt;br /&gt;
&lt;br /&gt;
tcpdump에는 보이지만 파일이 안 생김&lt;br /&gt;
→ rsyslog 설정 확인&lt;br /&gt;
&lt;br /&gt;
파일은 생기지만 Grafana에 안 보임&lt;br /&gt;
→ Alloy/Loki 확인&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 23. Loki와 Alloy의 역할 ==&lt;br /&gt;
&lt;br /&gt;
rsyslog가 파일을 만드는 것만으로 Grafana가 그 파일을 검색할 수 있는 것은 아니다.&lt;br /&gt;
&lt;br /&gt;
Loki가 로그 저장소 역할을 하고 Alloy가 파일을 읽어 Loki에 넣는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/var/log/...&lt;br /&gt;
    |&lt;br /&gt;
    v&lt;br /&gt;
  Alloy&lt;br /&gt;
    |&lt;br /&gt;
    v&lt;br /&gt;
  Loki&lt;br /&gt;
    |&lt;br /&gt;
    v&lt;br /&gt;
 Grafana&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
현재 구성에서는 Loki가 localhost 3100에서 동작한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
127.0.0.1:3100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alloy 로컬 관리 Endpoint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
127.0.0.1:12345&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 24. Alloy 설정 이해하기 ==&lt;br /&gt;
&lt;br /&gt;
=== 24.1 Network Syslog ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.source.file &amp;quot;network_syslog&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
  targets = [&lt;br /&gt;
    {&lt;br /&gt;
      __path__ = &amp;quot;/var/log/network-syslog/events.log&amp;quot;,&lt;br /&gt;
      job      = &amp;quot;network-syslog&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
  forward_to = [&lt;br /&gt;
    loki.process.network_syslog.receiver&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;source.file&#039;&#039;&#039;은 어떤 파일을 읽을지 지정한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;job&#039;&#039;&#039;은 Loki에서 로그 종류를 구분하기 위한 Label이다.&lt;br /&gt;
&lt;br /&gt;
그 다음 regex로 한 줄을 분해한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.process &amp;quot;network_syslog&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
  stage.regex {&lt;br /&gt;
    expression = `^(?P&amp;lt;received_at&amp;gt;\S+) src=(?P&amp;lt;device_ip&amp;gt;\S+) severity=(?P&amp;lt;severity&amp;gt;\S+) host=(?P&amp;lt;device_host&amp;gt;\S+) (?P&amp;lt;message&amp;gt;.*)$`&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.timestamp {&lt;br /&gt;
    source            = &amp;quot;received_at&amp;quot;&lt;br /&gt;
    format            = &amp;quot;RFC3339Nano&amp;quot;&lt;br /&gt;
    action_on_failure = &amp;quot;skip&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.labels {&lt;br /&gt;
    values = {&lt;br /&gt;
      device_ip = &amp;quot;&amp;quot;&lt;br /&gt;
      severity  = &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  forward_to = [&lt;br /&gt;
    loki.write.local.receiver&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서 다음 Label이 생긴다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
job&lt;br /&gt;
device_ip&lt;br /&gt;
severity&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;device_host를 Label로 추가하려면&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
stage.labels {&lt;br /&gt;
  values = {&lt;br /&gt;
    device_ip   = &amp;quot;&amp;quot;&lt;br /&gt;
    device_host = &amp;quot;&amp;quot;&lt;br /&gt;
    severity    = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이는 이후 Alert Mail에서 Hostname까지 표시하고 싶을 때 유용하다.&lt;br /&gt;
&lt;br /&gt;
=== 24.2 QNAP Access ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.source.file &amp;quot;qnap_access&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
  targets = [&lt;br /&gt;
    {&lt;br /&gt;
      __path__ = &amp;quot;/var/log/qnap/access.log&amp;quot;,&lt;br /&gt;
      job      = &amp;quot;qnap-access&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
  forward_to = [&lt;br /&gt;
    loki.process.qnap_access.receiver&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loki.process &amp;quot;qnap_access&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
  stage.regex {&lt;br /&gt;
    expression = `^(?P&amp;lt;received_at&amp;gt;\S+) src=(?P&amp;lt;nas_ip&amp;gt;\S+) severity=(?P&amp;lt;severity&amp;gt;\S+) host=(?P&amp;lt;nas_host&amp;gt;\S+) (?P&amp;lt;message&amp;gt;.*)$`&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.timestamp {&lt;br /&gt;
    source            = &amp;quot;received_at&amp;quot;&lt;br /&gt;
    format            = &amp;quot;RFC3339Nano&amp;quot;&lt;br /&gt;
    action_on_failure = &amp;quot;skip&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.labels {&lt;br /&gt;
    values = {&lt;br /&gt;
      nas_ip   = &amp;quot;&amp;quot;&lt;br /&gt;
      nas_host = &amp;quot;&amp;quot;&lt;br /&gt;
      severity = &amp;quot;&amp;quot;&lt;br /&gt;
      log_type = &amp;quot;access&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  forward_to = [&lt;br /&gt;
    loki.write.local.receiver&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 24.3 Loki Write ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.write &amp;quot;local&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
  endpoint {&lt;br /&gt;
    url = &amp;quot;http://127.0.0.1:3100/loki/api/v1/push&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
즉 Alloy에서 처리한 로그를 로컬 Loki로 전송한다.&lt;br /&gt;
&lt;br /&gt;
=== 24.4 설정 검사 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
alloy validate \&lt;br /&gt;
  /etc/alloy/config.alloy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
정상이라면 아무 오류 없이 종료된다.&lt;br /&gt;
&lt;br /&gt;
반영:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl restart alloy&lt;br /&gt;
&lt;br /&gt;
systemctl status alloy \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loki에 실제 Job이 만들어졌는지 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -s \&lt;br /&gt;
  &#039;http://127.0.0.1:3100/loki/api/v1/label/job/values&#039; \&lt;br /&gt;
  | jq&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
중요한 점은 Alloy 설정에 job을 적었다고 바로 Loki에 Label이 생기는 것이 아니라 &#039;&#039;&#039;실제 로그가 최소 한 번 Loki에 저장되어야&#039;&#039;&#039; 조회 결과에 나타난다는 것이다.&lt;br /&gt;
&lt;br /&gt;
== 25. Alloy Permission 문제 해결 사례 ==&lt;br /&gt;
&lt;br /&gt;
실제 구축 과정에서 QNAP 로그 파일은 존재하지만 Alloy가 다음 오류를 출력하였다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
failed to tail file&lt;br /&gt;
stat failed&lt;br /&gt;
permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
먼저 경로 전체 권한 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
namei -l \&lt;br /&gt;
  /var/log/qnap/access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
정상 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
drwxr-x--- root alloy qnap&lt;br /&gt;
-rw-r----- root alloy access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alloy 계정으로 직접 읽기:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
sudo -u alloy \&lt;br /&gt;
  head /var/log/qnap/access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
그래도 실패하면 SELinux 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
getenforce&lt;br /&gt;
&lt;br /&gt;
ausearch \&lt;br /&gt;
  -m AVC \&lt;br /&gt;
  -ts recent \&lt;br /&gt;
  | grep -Ei &#039;alloy|qnap&#039;&lt;br /&gt;
&lt;br /&gt;
ls -Zd /var/log/qnap&lt;br /&gt;
ls -Z /var/log/qnap/access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;문제 해결 원칙&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
권한 문제가 있다고 SELinux를 바로 끄지 않는다.&lt;br /&gt;
&lt;br /&gt;
다음 순서로 본다.&lt;br /&gt;
&lt;br /&gt;
# 파일 Owner/Group&lt;br /&gt;
# 파일 Mode&lt;br /&gt;
# 상위 Directory execute 권한&lt;br /&gt;
# Alloy Service User&lt;br /&gt;
# SELinux Context / AVC&lt;br /&gt;
&lt;br /&gt;
== 26. Grafana에 Loki 추가 ==&lt;br /&gt;
&lt;br /&gt;
Grafana:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Connections&lt;br /&gt;
→ Data sources&lt;br /&gt;
→ Add data source&lt;br /&gt;
→ Loki&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
http://127.0.0.1:3100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explore에서 Network 로그 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
{job=&amp;quot;network-syslog&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QNAP Access:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
{job=&amp;quot;qnap-access&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QNAP Event:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
{job=&amp;quot;qnap-event&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 27. Grafana Alert를 처음 구성할 때 알아둘 점 ==&lt;br /&gt;
&lt;br /&gt;
Grafana Alert는 Dashboard의 그래프와 달리 최종적으로 &#039;&#039;&#039;숫자 하나 또는 Alert Instance별 숫자&#039;&#039;&#039;를 평가해야 한다.&lt;br /&gt;
&lt;br /&gt;
Range Query를 그대로 Alert Condition에 사용하면 다음 오류가 발생할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
looks like time series data,&lt;br /&gt;
only reduced data can be alerted on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 다음 중 하나를 사용한다.&lt;br /&gt;
&lt;br /&gt;
# Query를 Instant로 구성&lt;br /&gt;
# Range Query → Reduce → Threshold&lt;br /&gt;
&lt;br /&gt;
== 28. Syslog Critical Alert ==&lt;br /&gt;
&lt;br /&gt;
Level 3(Error) 이상:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
sum by (device_ip, severity) (&lt;br /&gt;
  count_over_time(&lt;br /&gt;
    {&lt;br /&gt;
      job=&amp;quot;network-syslog&amp;quot;,&lt;br /&gt;
      severity=~&amp;quot;emerg|alert|crit|err&amp;quot;&lt;br /&gt;
    }[1m]&lt;br /&gt;
  )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
권장:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
A = Loki Instant Query&lt;br /&gt;
&lt;br /&gt;
B = Threshold&lt;br /&gt;
A IS ABOVE 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Summary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Syslog 경고]&lt;br /&gt;
{{ $labels.device_ip }}&lt;br /&gt;
{{ $labels.severity }}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Description:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
장비 {{ $labels.device_ip }} 에서&lt;br /&gt;
Syslog Level 3 이상 로그가 발생했습니다.&lt;br /&gt;
&lt;br /&gt;
Severity:&lt;br /&gt;
{{ $labels.severity }}&lt;br /&gt;
&lt;br /&gt;
최근 1분 발생 건수:&lt;br /&gt;
{{ $values.A.Value }}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 28.1 Alert Mail에 실제 로그 내용이 없는 이유 ===&lt;br /&gt;
&lt;br /&gt;
count_over_time()은 문자열 로그를 숫자로 집계한다.&lt;br /&gt;
&lt;br /&gt;
따라서 Query 결과에는 주로 다음만 남는다.&lt;br /&gt;
&lt;br /&gt;
* Label&lt;br /&gt;
* 발생 건수&lt;br /&gt;
&lt;br /&gt;
로그 message 전체를 Loki Label로 만들면 종류가 지나치게 많아져 Cardinality 문제가 발생할 수 있으므로 권장하지 않는다.&lt;br /&gt;
&lt;br /&gt;
메일에는 다음 정도를 넣고 실제 내용은 Grafana Explore에서 확인하는 구조가 안정적이다.&lt;br /&gt;
&lt;br /&gt;
* Device IP&lt;br /&gt;
* Hostname&lt;br /&gt;
* Severity&lt;br /&gt;
* 발생 건수&lt;br /&gt;
* Grafana Link&lt;br /&gt;
&lt;br /&gt;
== 29. ICMP Down Alert ==&lt;br /&gt;
&lt;br /&gt;
Flux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: -5m)&lt;br /&gt;
&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
    r._measurement == &amp;quot;ping&amp;quot; and&lt;br /&gt;
    r._field == &amp;quot;percent_packet_loss&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
  |&amp;gt; group(&lt;br /&gt;
    columns: [&amp;quot;url&amp;quot;]&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
  |&amp;gt; last()&lt;br /&gt;
&lt;br /&gt;
  |&amp;gt; keep(&lt;br /&gt;
    columns: [&lt;br /&gt;
      &amp;quot;_time&amp;quot;,&lt;br /&gt;
      &amp;quot;_value&amp;quot;,&lt;br /&gt;
      &amp;quot;url&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alert 구조:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
A = Flux Query&lt;br /&gt;
&lt;br /&gt;
B = Reduce&lt;br /&gt;
    Last&lt;br /&gt;
    Strict&lt;br /&gt;
&lt;br /&gt;
C = Threshold&lt;br /&gt;
    B &amp;gt; 99&lt;br /&gt;
&lt;br /&gt;
Pending = 2m&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No Data 정책:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Keep Last State&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;왜 Keep Last State인가?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Metric이나 Log Source가 순간적으로 No Data가 되었을 때 별도의 DatasourceNoData 메일이 발생하면서 실제 장비 Label이 없는 알림이 발송될 수 있다.&lt;br /&gt;
&lt;br /&gt;
No Data 자체를 별도 장애로 관리할 필요가 있다면 별도의 수집 상태 Alert를 구성하는 것이 더 명확하다.&lt;br /&gt;
&lt;br /&gt;
== 30. 최종 Dashboard 구성 방법 ==&lt;br /&gt;
&lt;br /&gt;
처음 설치한 사용자는 Dashboard를 한 번에 완성하려 하지 말고 다음 단계로 만든다.&lt;br /&gt;
&lt;br /&gt;
# 데이터소스 Save &amp;amp; Test&lt;br /&gt;
# Explore에서 실제 데이터 확인&lt;br /&gt;
# Stat 패널 하나 생성&lt;br /&gt;
# Time Series 하나 생성&lt;br /&gt;
# 장비 한 대 정상 확인&lt;br /&gt;
# 변수 추가&lt;br /&gt;
# 여러 장비로 확대&lt;br /&gt;
# Alert 추가&lt;br /&gt;
&lt;br /&gt;
=== 30.1 Network Switch Dashboard ===&lt;br /&gt;
&lt;br /&gt;
권장 Row:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Row&lt;br /&gt;
! 표시 내용&lt;br /&gt;
! 목적&lt;br /&gt;
|-&lt;br /&gt;
| Device 상태&lt;br /&gt;
| Device Name / Uptime / CPU / Memory / Ping&lt;br /&gt;
| 장비 자체 상태&lt;br /&gt;
|-&lt;br /&gt;
| Port 상태&lt;br /&gt;
| ifName / ifAlias / Speed / operStatus&lt;br /&gt;
| Link 상태&lt;br /&gt;
|-&lt;br /&gt;
| Traffic&lt;br /&gt;
| RX / TX bps&lt;br /&gt;
| 대역폭 사용량&lt;br /&gt;
|-&lt;br /&gt;
| Packet&lt;br /&gt;
| Unicast / Broadcast / Multicast PPS&lt;br /&gt;
| Broadcast 폭주 및 Packet 패턴&lt;br /&gt;
|-&lt;br /&gt;
| Error&lt;br /&gt;
| Error / Discard&lt;br /&gt;
| 품질 및 혼잡 징후&lt;br /&gt;
|-&lt;br /&gt;
| Syslog&lt;br /&gt;
| warning / err / crit&lt;br /&gt;
| 이벤트 원인 확인&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 30.2 Linux Dashboard ===&lt;br /&gt;
&lt;br /&gt;
권장:&lt;br /&gt;
&lt;br /&gt;
* Uptime&lt;br /&gt;
* CPU&lt;br /&gt;
* Memory&lt;br /&gt;
* Load&lt;br /&gt;
* Disk Capacity&lt;br /&gt;
* Disk I/O&lt;br /&gt;
* Network RX/TX&lt;br /&gt;
* Network Error/Drop&lt;br /&gt;
* Application/Security Log&lt;br /&gt;
&lt;br /&gt;
=== 30.3 Windows Dashboard ===&lt;br /&gt;
&lt;br /&gt;
권장:&lt;br /&gt;
&lt;br /&gt;
* Exporter UP&lt;br /&gt;
* Uptime&lt;br /&gt;
* CPU&lt;br /&gt;
* Memory&lt;br /&gt;
* Logical Disk&lt;br /&gt;
* Disk I/O&lt;br /&gt;
* Network&lt;br /&gt;
* Windows Event 연동 여부&lt;br /&gt;
&lt;br /&gt;
=== 30.4 QNAP Dashboard ===&lt;br /&gt;
&lt;br /&gt;
현재 실제 운영 구성을 기준으로 다음과 같이 구성한다.&lt;br /&gt;
&lt;br /&gt;
상단:&lt;br /&gt;
&lt;br /&gt;
* Node Exporter UP&lt;br /&gt;
* Uptime&lt;br /&gt;
* CPU Usage&lt;br /&gt;
* Memory Usage&lt;br /&gt;
* HDD 최고 온도&lt;br /&gt;
&lt;br /&gt;
중단:&lt;br /&gt;
&lt;br /&gt;
* CPU / Memory / Load&lt;br /&gt;
* bond0 RX / TX&lt;br /&gt;
* Disk 상태&lt;br /&gt;
* DataVol1 Volume&lt;br /&gt;
* DataVol1 Filesystem 사용률&lt;br /&gt;
* bond0 Error / Drop&lt;br /&gt;
* Physical Disk I/O / IOPS&lt;br /&gt;
&lt;br /&gt;
하단:&lt;br /&gt;
&lt;br /&gt;
* QNAP Event Log&lt;br /&gt;
* QNAP Access Log&lt;br /&gt;
&lt;br /&gt;
제거한 항목:&lt;br /&gt;
&lt;br /&gt;
* 상단 RAID 상태&lt;br /&gt;
* Storage Pool 상태&lt;br /&gt;
* Storage Pool 사용률&lt;br /&gt;
* RAID 상세 Table&lt;br /&gt;
* Storage Pool 상세 Table&lt;br /&gt;
&lt;br /&gt;
삭제 이유는 Dashboard를 운영자가 빠르게 읽을 수 있도록 단순화하기 위해서이다.&lt;br /&gt;
&lt;br /&gt;
RAID/Storage Pool 상세는 필요 시 별도의 상세 Dashboard에서 확인할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 31. 초보자가 자주 만나는 문제 ==&lt;br /&gt;
&lt;br /&gt;
=== 31.1 Telegraf --test는 되는데 서비스는 안 됨 ===&lt;br /&gt;
&lt;br /&gt;
root 권한에서는 Ping이 되지만 telegraf 서비스 계정에서는 Raw Socket 권한이 없을 수 있다.&lt;br /&gt;
&lt;br /&gt;
확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
journalctl -u telegraf \&lt;br /&gt;
  -n 100 \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
native Ping이면 CAP_NET_RAW 설정을 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 31.2 snmpget은 되는데 Telegraf에서 일부 장비만 누락 ===&lt;br /&gt;
&lt;br /&gt;
가능한 원인:&lt;br /&gt;
&lt;br /&gt;
* timeout이 너무 짧음&lt;br /&gt;
* retries가 0&lt;br /&gt;
* OID가 모델과 다름&lt;br /&gt;
* DES/AES 조합이 장비와 다름&lt;br /&gt;
* SNMP View 제한&lt;br /&gt;
&lt;br /&gt;
먼저 동일 OID를 snmpget으로 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 31.3 Prometheus가 재시작 반복 ===&lt;br /&gt;
&lt;br /&gt;
가장 먼저:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
promtool check config \&lt;br /&gt;
  /etc/prometheus/prometheus.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
YAML 들여쓰기를 확인한다.&lt;br /&gt;
&lt;br /&gt;
그 다음:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
journalctl -u prometheus \&lt;br /&gt;
  -n 100 \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 31.4 Grafana에서 Filesystem이 너무 많이 보임 ===&lt;br /&gt;
&lt;br /&gt;
Linux/QNAP에는 tmpfs, loop, snapshot, container mount 등이 존재할 수 있다.&lt;br /&gt;
&lt;br /&gt;
전체를 보여주기보다 운영자가 실제 사용하는 Mount Point만 필터링한다.&lt;br /&gt;
&lt;br /&gt;
QNAP 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mountpoint=&amp;quot;/share/CACHEDEV1_DATA&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 31.5 Loki에 Job이 안 보임 ===&lt;br /&gt;
&lt;br /&gt;
설정에 job이 있다고 바로 나타나는 것이 아니다.&lt;br /&gt;
&lt;br /&gt;
실제 Log가 Loki에 한 번 이상 저장되어야 한다.&lt;br /&gt;
&lt;br /&gt;
확인 순서:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
tail -n 10 \&lt;br /&gt;
  /var/log/qnap/access.log&lt;br /&gt;
&lt;br /&gt;
journalctl -u alloy \&lt;br /&gt;
  -n 100 \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&lt;br /&gt;
curl -s \&lt;br /&gt;
  &#039;http://127.0.0.1:3100/loki/api/v1/label/job/values&#039; \&lt;br /&gt;
  | jq&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 32. 구축 완료 후 점검 Checklist ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 확인&lt;br /&gt;
! 항목&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Rocky Linux 시간 동기화 정상&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| InfluxDB health 정상&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Telegraf 서비스 정상&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| SNMP 장비별 응답 확인&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| InfluxDB에 SNMP 데이터 저장&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Prometheus health 정상&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Node Exporter Target UP&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Windows Exporter Target UP&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| QNAP Node Exporter Target UP&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| rsyslog Network 로그 수신&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| QNAP Event / Access Log 분리 수신&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Alloy Permission 정상&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Loki job 확인&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Grafana InfluxDB Save &amp;amp; Test&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Grafana Prometheus Save &amp;amp; Test&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Grafana Loki Save &amp;amp; Test&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Switch Traffic 그래프 정상&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Error/Discard 그래프 정상&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Linux/Windows Dashboard 정상&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| QNAP DataVol1 용량 QTS와 일치&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| QNAP Snapshot 제외&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| QNAP bond0만 Network 표시&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| Syslog Alert Mail에 장비 IP / Severity 표시&lt;br /&gt;
|-&lt;br /&gt;
| □&lt;br /&gt;
| ICMP Down Alert 정상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 33. 전체 장애 점검 순서 ==&lt;br /&gt;
&lt;br /&gt;
모니터링이 안 될 때 Grafana부터 무작정 수정하지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 33.1 SNMP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Switch&lt;br /&gt;
  ↓&lt;br /&gt;
snmpget&lt;br /&gt;
  ↓&lt;br /&gt;
Telegraf --test&lt;br /&gt;
  ↓&lt;br /&gt;
Telegraf Service&lt;br /&gt;
  ↓&lt;br /&gt;
InfluxDB&lt;br /&gt;
  ↓&lt;br /&gt;
Grafana Explore&lt;br /&gt;
  ↓&lt;br /&gt;
Dashboard&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 33.2 Prometheus ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Exporter /metrics&lt;br /&gt;
  ↓&lt;br /&gt;
Prometheus Target&lt;br /&gt;
  ↓&lt;br /&gt;
Prometheus Query&lt;br /&gt;
  ↓&lt;br /&gt;
Grafana Explore&lt;br /&gt;
  ↓&lt;br /&gt;
Dashboard&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 33.3 Syslog ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Device 송신&lt;br /&gt;
  ↓&lt;br /&gt;
tcpdump&lt;br /&gt;
  ↓&lt;br /&gt;
rsyslog&lt;br /&gt;
  ↓&lt;br /&gt;
Log File&lt;br /&gt;
  ↓&lt;br /&gt;
Alloy&lt;br /&gt;
  ↓&lt;br /&gt;
Loki&lt;br /&gt;
  ↓&lt;br /&gt;
Grafana Explore&lt;br /&gt;
  ↓&lt;br /&gt;
Dashboard / Alert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 순서대로 확인하면 문제 지점을 빠르게 좁힐 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 34. 운영 원칙 요약 ==&lt;br /&gt;
&lt;br /&gt;
* 처음부터 모든 장비를 추가하지 않는다.&lt;br /&gt;
* 한 장비, 한 Port를 먼저 완성한다.&lt;br /&gt;
* 설정 변경 후 항상 해당 서비스의 검사 명령을 실행한다.&lt;br /&gt;
* Counter와 현재 상태값을 구분한다.&lt;br /&gt;
* No Data와 0을 같은 의미로 처리하지 않는다.&lt;br /&gt;
* SNMP Password와 Token을 Wiki에 저장하지 않는다.&lt;br /&gt;
* Grafana는 수집기가 아니라 시각화 계층임을 기억한다.&lt;br /&gt;
* QNAP처럼 제조사별 특이사항은 실제 값과 Vendor 화면을 대조한다.&lt;br /&gt;
* Alert는 처음부터 너무 많이 만들지 않는다.&lt;br /&gt;
* 정상 상태의 기준 데이터를 먼저 쌓은 후 임계값을 결정한다.&lt;br /&gt;
* 장애 시에는 수집 경로를 앞단부터 순서대로 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 35. 최종 구성 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
                  +----------------------+&lt;br /&gt;
                  |       Grafana        |&lt;br /&gt;
                  +----------+-----------+&lt;br /&gt;
                             |&lt;br /&gt;
          +------------------+------------------+&lt;br /&gt;
          |                  |                  |&lt;br /&gt;
          v                  v                  v&lt;br /&gt;
     Prometheus          InfluxDB              Loki&lt;br /&gt;
          ^                  ^                  ^&lt;br /&gt;
          |                  |                  |&lt;br /&gt;
     Exporters           Telegraf             Alloy&lt;br /&gt;
          ^                  ^                  ^&lt;br /&gt;
          |                  |                  |&lt;br /&gt;
 Linux / Windows / QNAP   SNMP Device      Syslog Files&lt;br /&gt;
                                                ^&lt;br /&gt;
                                                |&lt;br /&gt;
                                             rsyslog&lt;br /&gt;
                                                ^&lt;br /&gt;
                                                |&lt;br /&gt;
                                      Network / Server / NAS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 구조가 완성되면 다음 세 종류의 정보를 한 Grafana에서 확인할 수 있다.&lt;br /&gt;
&lt;br /&gt;
# 장비와 서버의 현재 상태&lt;br /&gt;
# 시간에 따른 성능 변화&lt;br /&gt;
# 장애 시점의 이벤트 로그&lt;br /&gt;
&lt;br /&gt;
초보자는 먼저 &amp;quot;데이터가 어디서 생성되어 어디를 거쳐 Grafana까지 도착하는지&amp;quot;를 이해한 뒤 설정값을 수정하는 것이 가장 중요하다.&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=SNMP%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%84%9C%EB%B2%84&amp;diff=119</id>
		<title>SNMP테스트서버</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=SNMP%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%84%9C%EB%B2%84&amp;diff=119"/>
		<updated>2026-09-23T11:22:12Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Rocky Linux 9 통합 모니터링 서버 구축 가이드 =&lt;br /&gt;
: Telegraf / InfluxDB / Grafana / Prometheus / Node Exporter / Windows Exporter / Loki / Alloy / rsyslog&lt;br /&gt;
&lt;br /&gt;
작성 기준: 실제 구성 및 장애 처리 기록 기반&lt;br /&gt;
문서 형식: MediaWiki&lt;br /&gt;
IP 주소: 문서용 예시 주소로 치환&lt;br /&gt;
운영환경 적용 전 실제 장비 주소, 계정, 토큰, OID를 확인한다.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 0. 목적 및 최종 구성 ==&lt;br /&gt;
&lt;br /&gt;
본 문서는 Rocky Linux 9 기반 모니터링 서버를 처음 구축하는 단계부터 네트워크 장비 SNMP, 서버 Metric, Syslog, QNAP NAS 모니터링 및 Grafana Dashboard 구성까지 정리한다.&lt;br /&gt;
&lt;br /&gt;
최종 구조는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Network Switch&lt;br /&gt;
    |&lt;br /&gt;
    +-- SNMPv3 UDP/161&lt;br /&gt;
    |      |&lt;br /&gt;
    |      +--&amp;gt; Telegraf&lt;br /&gt;
    |              |&lt;br /&gt;
    |              +--&amp;gt; InfluxDB OSS 2.x&lt;br /&gt;
    |&lt;br /&gt;
    +-- Syslog TCP/UDP&lt;br /&gt;
           |&lt;br /&gt;
           +--&amp;gt; rsyslog&lt;br /&gt;
                    |&lt;br /&gt;
                    +--&amp;gt; Log File&lt;br /&gt;
                             |&lt;br /&gt;
                             +--&amp;gt; Grafana Alloy&lt;br /&gt;
                                      |&lt;br /&gt;
                                      +--&amp;gt; Loki&lt;br /&gt;
&lt;br /&gt;
Linux / QNAP&lt;br /&gt;
    |&lt;br /&gt;
    +-- node_exporter :9100&lt;br /&gt;
             |&lt;br /&gt;
             +--&amp;gt; Prometheus&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
    |&lt;br /&gt;
    +-- windows_exporter :9182&lt;br /&gt;
             |&lt;br /&gt;
             +--&amp;gt; Prometheus&lt;br /&gt;
&lt;br /&gt;
Prometheus + InfluxDB + Loki&lt;br /&gt;
             |&lt;br /&gt;
             +--&amp;gt; Grafana&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0.1 문서용 IP 주소 ===&lt;br /&gt;
&lt;br /&gt;
본 문서에서는 실제 운영 IP를 노출하지 않고 RFC 문서용 주소를 사용한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 대상&lt;br /&gt;
! 예시 주소&lt;br /&gt;
! 용도&lt;br /&gt;
|-&lt;br /&gt;
| Monitoring Server&lt;br /&gt;
| 192.0.2.10&lt;br /&gt;
| Grafana / Prometheus / InfluxDB / Telegraf / Loki / Alloy / rsyslog&lt;br /&gt;
|-&lt;br /&gt;
| Linux Server&lt;br /&gt;
| 192.0.2.20&lt;br /&gt;
| node_exporter&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server&lt;br /&gt;
| 192.0.2.30&lt;br /&gt;
| windows_exporter&lt;br /&gt;
|-&lt;br /&gt;
| QNAP NAS&lt;br /&gt;
| 198.51.100.10&lt;br /&gt;
| node_exporter / SNMP / Syslog&lt;br /&gt;
|-&lt;br /&gt;
| Switch-01&lt;br /&gt;
| 203.0.113.11&lt;br /&gt;
| SNMP / Syslog&lt;br /&gt;
|-&lt;br /&gt;
| Switch-02&lt;br /&gt;
| 203.0.113.12&lt;br /&gt;
| SNMP / Syslog&lt;br /&gt;
|-&lt;br /&gt;
| Switch-03&lt;br /&gt;
| 203.0.113.13&lt;br /&gt;
| SNMP / Syslog&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 1. Rocky Linux 기본 준비 ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 시스템 상태 확인 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
cat /etc/rocky-release&lt;br /&gt;
uname -m&lt;br /&gt;
ip -br address&lt;br /&gt;
ip route&lt;br /&gt;
df -hT&lt;br /&gt;
free -h&lt;br /&gt;
getenforce&lt;br /&gt;
ss -lntup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELinux와 firewalld는 초기부터 비활성화하지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 1.2 백업 디렉터리 생성 ===&lt;br /&gt;
&lt;br /&gt;
기존 서버에 추가 설치하는 경우 설정 파일 백업을 먼저 수행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
umask 077&lt;br /&gt;
&lt;br /&gt;
MON_BACKUP=&amp;quot;/root/monitor-backup-$(date +%Y%m%d-%H%M%S)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
install -d -m 700 &amp;quot;$MON_BACKUP&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cp -a /etc/rsyslog.conf &amp;quot;$MON_BACKUP/&amp;quot; 2&amp;gt;/dev/null || true&lt;br /&gt;
cp -a /etc/rsyslog.d &amp;quot;$MON_BACKUP/&amp;quot; 2&amp;gt;/dev/null || true&lt;br /&gt;
cp -a /etc/chrony.conf &amp;quot;$MON_BACKUP/&amp;quot; 2&amp;gt;/dev/null || true&lt;br /&gt;
cp -a /etc/firewalld &amp;quot;$MON_BACKUP/&amp;quot; 2&amp;gt;/dev/null || true&lt;br /&gt;
&lt;br /&gt;
rpm -qa | sort &amp;gt; &amp;quot;$MON_BACKUP/packages-before.txt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 기본 패키지 설치 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
dnf install -y \&lt;br /&gt;
    curl \&lt;br /&gt;
    ca-certificates \&lt;br /&gt;
    gnupg2 \&lt;br /&gt;
    vim-enhanced \&lt;br /&gt;
    net-snmp-utils \&lt;br /&gt;
    rsyslog \&lt;br /&gt;
    logrotate \&lt;br /&gt;
    chrony \&lt;br /&gt;
    tcpdump \&lt;br /&gt;
    iputils \&lt;br /&gt;
    sysstat \&lt;br /&gt;
    policycoreutils-python-utils \&lt;br /&gt;
    dnf-plugins-core \&lt;br /&gt;
    jq&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.4 시간 동기화 ===&lt;br /&gt;
&lt;br /&gt;
모니터링에서는 장비와 서버 간 시간이 맞아야 장애 시각을 비교할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
timedatectl set-timezone Asia/Seoul&lt;br /&gt;
&lt;br /&gt;
systemctl enable --now chronyd&lt;br /&gt;
systemctl restart chronyd&lt;br /&gt;
&lt;br /&gt;
chronyc tracking&lt;br /&gt;
chronyc sources -v&lt;br /&gt;
date -Ins&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. InfluxDB / Telegraf / Grafana 설치 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 InfluxData Repository ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -fL https://repos.influxdata.com/influxdata-archive.key \&lt;br /&gt;
    -o /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
&lt;br /&gt;
gpg --show-keys --with-fingerprint \&lt;br /&gt;
    /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
&lt;br /&gt;
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/yum.repos.d/influxdata.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[influxdata]&lt;br /&gt;
name=InfluxData Repository - Stable&lt;br /&gt;
baseurl=https://repos.influxdata.com/stable/$basearch/main&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
sslverify=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2 Grafana Repository ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/yum.repos.d/grafana.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[grafana]&lt;br /&gt;
name=Grafana OSS repository&lt;br /&gt;
baseurl=https://rpm.grafana.com&lt;br /&gt;
repo_gpgcheck=1&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=https://rpm.grafana.com/gpg.key&lt;br /&gt;
sslverify=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.3 패키지 설치 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
dnf makecache&lt;br /&gt;
&lt;br /&gt;
dnf list --showduplicates \&lt;br /&gt;
    telegraf \&lt;br /&gt;
    influxdb2 \&lt;br /&gt;
    influxdb2-cli \&lt;br /&gt;
    grafana&lt;br /&gt;
&lt;br /&gt;
dnf install -y \&lt;br /&gt;
    telegraf \&lt;br /&gt;
    influxdb2 \&lt;br /&gt;
    influxdb2-cli \&lt;br /&gt;
    grafana&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
버전 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rpm -q telegraf influxdb2 influxdb2-cli grafana rsyslog&lt;br /&gt;
&lt;br /&gt;
telegraf --version&lt;br /&gt;
influxd version&lt;br /&gt;
influx version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실제 구축 과정에서는 Telegraf 1.40.0 환경에서 동작을 확인하였다.&lt;br /&gt;
&lt;br /&gt;
== 3. InfluxDB 초기 구성 ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 Localhost Bind ===&lt;br /&gt;
&lt;br /&gt;
InfluxDB API는 Grafana 및 Telegraf가 같은 서버에 있으므로 localhost만 수신하도록 구성한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -d -m 755 /etc/systemd/system/influxdb.service.d&lt;br /&gt;
&lt;br /&gt;
vi /etc/systemd/system/influxdb.service.d/10-listen.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;INFLUXD_HTTP_BIND_ADDRESS=127.0.0.1:8086&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now influxdb&lt;br /&gt;
systemctl restart influxdb&lt;br /&gt;
&lt;br /&gt;
systemctl status influxdb --no-pager&lt;br /&gt;
&lt;br /&gt;
ss -lntp | grep &#039;:8086&#039;&lt;br /&gt;
&lt;br /&gt;
curl -fsS http://127.0.0.1:8086/health&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.2 Initial Setup ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
influx setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예시:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 설정&lt;br /&gt;
! 값&lt;br /&gt;
|-&lt;br /&gt;
| Organization&lt;br /&gt;
| network&lt;br /&gt;
|-&lt;br /&gt;
| Bucket&lt;br /&gt;
| snmp_raw&lt;br /&gt;
|-&lt;br /&gt;
| Retention&lt;br /&gt;
| 720h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bucket 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
influx bucket list --org network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.3 Token 분리 ===&lt;br /&gt;
&lt;br /&gt;
서비스별 Token 권한을 분리한다.&lt;br /&gt;
&lt;br /&gt;
* telegraf-write : snmp_raw Write&lt;br /&gt;
* grafana-read : snmp_raw Read&lt;br /&gt;
* Operator Token : 관리자용&lt;br /&gt;
&lt;br /&gt;
운영 문서에 실제 Token 값을 기록하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 4. Telegraf 기본 구성 ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 환경 변수 파일 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/telegraf/monitor.env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
INFLUX_WRITE_TOKEN=&#039;&amp;lt;WRITE_TOKEN&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
ZYXEL_SNMP_USER=&#039;&amp;lt;SNMP_USER&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_AUTH=&#039;&amp;lt;AUTH_PASSWORD&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_PRIV=&#039;&amp;lt;PRIV_PASSWORD&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
QNAP_SNMP_USER=&#039;&amp;lt;QNAP_SNMP_USER&amp;gt;&#039;&lt;br /&gt;
QNAP_SNMP_AUTH=&#039;&amp;lt;QNAP_AUTH_PASSWORD&amp;gt;&#039;&lt;br /&gt;
QNAP_SNMP_PRIV=&#039;&amp;lt;QNAP_PRIV_PASSWORD&amp;gt;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chown root:root /etc/telegraf/monitor.env&lt;br /&gt;
chmod 600 /etc/telegraf/monitor.env&lt;br /&gt;
&lt;br /&gt;
install -d -m 755 /etc/systemd/system/telegraf.service.d&lt;br /&gt;
&lt;br /&gt;
vi /etc/systemd/system/telegraf.service.d/10-monitor-env.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
EnvironmentFile=/etc/telegraf/monitor.env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Main Configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
cp -a /etc/telegraf/telegraf.conf \&lt;br /&gt;
    /etc/telegraf/telegraf.conf.orig&lt;br /&gt;
&lt;br /&gt;
vi /etc/telegraf/telegraf.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
  interval = &amp;quot;30s&amp;quot;&lt;br /&gt;
  round_interval = true&lt;br /&gt;
  flush_interval = &amp;quot;5s&amp;quot;&lt;br /&gt;
  precision = &amp;quot;1ms&amp;quot;&lt;br /&gt;
  metric_batch_size = 1000&lt;br /&gt;
  metric_buffer_limit = 20000&lt;br /&gt;
  omit_hostname = false&lt;br /&gt;
  snmp_translator = &amp;quot;gosmi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[outputs.influxdb_v2]]&lt;br /&gt;
  urls = [&amp;quot;http://127.0.0.1:8086&amp;quot;]&lt;br /&gt;
  token = &amp;quot;${INFLUX_WRITE_TOKEN}&amp;quot;&lt;br /&gt;
  organization = &amp;quot;network&amp;quot;&lt;br /&gt;
  bucket = &amp;quot;snmp_raw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[inputs.internal]]&lt;br /&gt;
&lt;br /&gt;
[[inputs.cpu]]&lt;br /&gt;
  percpu = false&lt;br /&gt;
  totalcpu = true&lt;br /&gt;
&lt;br /&gt;
[[inputs.mem]]&lt;br /&gt;
&lt;br /&gt;
[[inputs.disk]]&lt;br /&gt;
  mount_points = [&amp;quot;/&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[inputs.net]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. SNMPv3 사전 확인 ==&lt;br /&gt;
&lt;br /&gt;
SNMP는 v3 authPriv 사용을 기본으로 한다.&lt;br /&gt;
&lt;br /&gt;
Net-SNMP 테스트 파일:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -d -m 700 /root/.snmp&lt;br /&gt;
&lt;br /&gt;
vi /root/.snmp/snmp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
defVersion 3&lt;br /&gt;
defSecurityName &amp;lt;SNMP_USER&amp;gt;&lt;br /&gt;
defSecurityLevel authPriv&lt;br /&gt;
defAuthType SHA&lt;br /&gt;
defAuthPassphrase &amp;lt;SNMP_AUTH_PASSWORD&amp;gt;&lt;br /&gt;
defPrivType AES&lt;br /&gt;
defPrivPassphrase &amp;lt;SNMP_PRIV_PASSWORD&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chmod 600 /root/.snmp/snmp.conf&lt;br /&gt;
&lt;br /&gt;
snmpget -v3 -t 2 -r 0 -On \&lt;br /&gt;
    203.0.113.11 \&lt;br /&gt;
    .1.3.6.1.2.1.1.3.0&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v3 -t 2 -r 0 -On \&lt;br /&gt;
    203.0.113.11 \&lt;br /&gt;
    .1.3.6.1.2.1.31.1.1.1.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ifName OID 마지막 값이 ifIndex이다.&lt;br /&gt;
&lt;br /&gt;
== 6. Telegraf SNMP 구성 ==&lt;br /&gt;
&lt;br /&gt;
설정 파일은 장비 모델별로 분리한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/etc/telegraf/telegraf.d/&lt;br /&gt;
├── 10-zyxel-gs1900.conf&lt;br /&gt;
├── 11-zyxel-gs1920.conf&lt;br /&gt;
├── 20-zyxel-es3128.conf&lt;br /&gt;
├── 30-icmp_check.conf&lt;br /&gt;
├── 40-qnap_nas.conf&lt;br /&gt;
└── sflow.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 6.1 GS1920 계열 ===&lt;br /&gt;
&lt;br /&gt;
예시 대상:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
203.0.113.21&lt;br /&gt;
203.0.113.22&lt;br /&gt;
203.0.113.23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SNMPv3:&lt;br /&gt;
&lt;br /&gt;
* SHA&lt;br /&gt;
* DES&lt;br /&gt;
&lt;br /&gt;
CPU OID:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.4.1.890.1.15.3.49.1.7.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Total   .1.3.6.1.4.1.890.1.15.3.50.1.1.1.3.1&lt;br /&gt;
Used    .1.3.6.1.4.1.890.1.15.3.50.1.1.1.4.1&lt;br /&gt;
Percent .1.3.6.1.4.1.890.1.15.3.50.1.1.1.5.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 6.2 GS1900 계열 ===&lt;br /&gt;
&lt;br /&gt;
CPU:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.4.1.890.1.15.3.2.4.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.4.1.890.1.15.3.2.5.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실제 구축에서는 2초 timeout / retries 0에서 응답 누락이 발생하여 다음과 같이 완화하였다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
timeout = &amp;quot;5s&amp;quot;&lt;br /&gt;
retries = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 6.3 ES-3128GP ===&lt;br /&gt;
&lt;br /&gt;
SNMPv3:&lt;br /&gt;
&lt;br /&gt;
* SHA&lt;br /&gt;
* AES&lt;br /&gt;
&lt;br /&gt;
sysObjectID:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
.1.3.6.1.4.1.7800.1.190&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CPU / Memory private OID는 장비에서 정상 확인되지 않아 Dashboard에서는 N/A 처리한다.&lt;br /&gt;
&lt;br /&gt;
=== 6.4 IF-MIB 주요 항목 ===&lt;br /&gt;
&lt;br /&gt;
수집 대상:&lt;br /&gt;
&lt;br /&gt;
* ifName&lt;br /&gt;
* ifAlias&lt;br /&gt;
* ifSpeed&lt;br /&gt;
* ifHCInOctets&lt;br /&gt;
* ifHCOutOctets&lt;br /&gt;
* ifOperStatus&lt;br /&gt;
* ifInErrors&lt;br /&gt;
* ifOutErrors&lt;br /&gt;
* ifInDiscards&lt;br /&gt;
* ifOutDiscards&lt;br /&gt;
* Broadcast&lt;br /&gt;
* Multicast&lt;br /&gt;
&lt;br /&gt;
누적 Counter는 Grafana에서 그대로 표시하지 않고 derivative/rate 계산 후 표시한다.&lt;br /&gt;
&lt;br /&gt;
== 7. ICMP 수집 ==&lt;br /&gt;
&lt;br /&gt;
Telegraf ping input을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/telegraf/telegraf.d/30-icmp_check.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예시 대상:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
203.0.113.11&lt;br /&gt;
203.0.113.12&lt;br /&gt;
203.0.113.13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
권장 설정:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[[inputs.ping]]&lt;br /&gt;
  urls = [&lt;br /&gt;
    &amp;quot;203.0.113.11&amp;quot;,&lt;br /&gt;
    &amp;quot;203.0.113.12&amp;quot;,&lt;br /&gt;
    &amp;quot;203.0.113.13&amp;quot;&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
  method = &amp;quot;native&amp;quot;&lt;br /&gt;
  count = 3&lt;br /&gt;
  deadline = 2.0&lt;br /&gt;
  interval = 10.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
native ping은 CAP_NET_RAW가 필요하다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl edit telegraf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
CapabilityBoundingSet=CAP_NET_RAW&lt;br /&gt;
AmbientCapabilities=CAP_NET_RAW&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl restart telegraf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. Telegraf Test 및 서비스 시작 ==&lt;br /&gt;
&lt;br /&gt;
설정 검사:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
telegraf \&lt;br /&gt;
  --config /etc/telegraf/telegraf.conf \&lt;br /&gt;
  --config-directory /etc/telegraf/telegraf.d \&lt;br /&gt;
  --test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실제 서비스 계정으로 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
systemd-run \&lt;br /&gt;
  --unit=telegraf-config-check \&lt;br /&gt;
  --wait \&lt;br /&gt;
  --pipe \&lt;br /&gt;
  --collect \&lt;br /&gt;
  -p User=telegraf \&lt;br /&gt;
  -p Group=telegraf \&lt;br /&gt;
  -p EnvironmentFile=/etc/telegraf/monitor.env \&lt;br /&gt;
  -p CapabilityBoundingSet=CAP_NET_RAW \&lt;br /&gt;
  -p AmbientCapabilities=CAP_NET_RAW \&lt;br /&gt;
  /usr/bin/telegraf \&lt;br /&gt;
  --config /etc/telegraf/telegraf.conf \&lt;br /&gt;
  --config-directory /etc/telegraf/telegraf.d \&lt;br /&gt;
  --test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
서비스 시작:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl enable --now telegraf&lt;br /&gt;
systemctl restart telegraf&lt;br /&gt;
&lt;br /&gt;
systemctl status telegraf --no-pager&lt;br /&gt;
journalctl -u telegraf -n 100 --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. Grafana 설치 및 InfluxDB 연결 ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1 Grafana 서비스 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/grafana/grafana.ini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
내부망 운영 환경에 맞게 listen 주소를 설정한다.&lt;br /&gt;
&lt;br /&gt;
예시:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
http_addr = 0.0.0.0&lt;br /&gt;
http_port = 3000&lt;br /&gt;
&lt;br /&gt;
[users]&lt;br /&gt;
allow_sign_up = false&lt;br /&gt;
&lt;br /&gt;
[auth.anonymous]&lt;br /&gt;
enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl enable --now grafana-server&lt;br /&gt;
systemctl restart grafana-server&lt;br /&gt;
&lt;br /&gt;
systemctl status grafana-server --no-pager&lt;br /&gt;
&lt;br /&gt;
curl -fsS http://127.0.0.1:3000/api/health&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9.2 InfluxDB Datasource ===&lt;br /&gt;
&lt;br /&gt;
Grafana:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Connections&lt;br /&gt;
  → Data sources&lt;br /&gt;
  → Add data source&lt;br /&gt;
  → InfluxDB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 설정&lt;br /&gt;
! 값&lt;br /&gt;
|-&lt;br /&gt;
| Query language&lt;br /&gt;
| Flux&lt;br /&gt;
|-&lt;br /&gt;
| URL&lt;br /&gt;
| http://127.0.0.1:8086&lt;br /&gt;
|-&lt;br /&gt;
| Organization&lt;br /&gt;
| network&lt;br /&gt;
|-&lt;br /&gt;
| Token&lt;br /&gt;
| grafana-read&lt;br /&gt;
|-&lt;br /&gt;
| Default Bucket&lt;br /&gt;
| snmp_raw&lt;br /&gt;
|-&lt;br /&gt;
| Min time interval&lt;br /&gt;
| 1s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 10. SNMP Dashboard 기본 구성 ==&lt;br /&gt;
&lt;br /&gt;
=== 10.1 Traffic ===&lt;br /&gt;
&lt;br /&gt;
Flux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: v.timeRangeStart, stop: v.timeRangeStop)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &amp;quot;switch_port&amp;quot;)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r.source == &amp;quot;203.0.113.11&amp;quot;)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
      r._field == &amp;quot;in_octets&amp;quot; or&lt;br /&gt;
      r._field == &amp;quot;out_octets&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; derivative(unit: 1s, nonNegative: true)&lt;br /&gt;
  |&amp;gt; map(fn: (r) =&amp;gt; ({&lt;br /&gt;
      r with _value: r._value * 8.0&lt;br /&gt;
  }))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Grafana Unit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
bits/sec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10.2 Error / Discard ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
      r._field == &amp;quot;in_errors&amp;quot; or&lt;br /&gt;
      r._field == &amp;quot;out_errors&amp;quot; or&lt;br /&gt;
      r._field == &amp;quot;in_discards&amp;quot; or&lt;br /&gt;
      r._field == &amp;quot;out_discards&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; derivative(unit: 1s, nonNegative: true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10.3 Broadcast / Multicast ===&lt;br /&gt;
&lt;br /&gt;
Broadcast/Multicast는 별도 패널로 표시하여 폭주 및 비정상 증가를 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 11. Prometheus 설치 ==&lt;br /&gt;
&lt;br /&gt;
실제 구축에서는 Prometheus 3.13.3을 사용하였다.&lt;br /&gt;
&lt;br /&gt;
=== 11.1 사용자 및 디렉터리 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
useradd \&lt;br /&gt;
  --system \&lt;br /&gt;
  --no-create-home \&lt;br /&gt;
  --shell /sbin/nologin \&lt;br /&gt;
  prometheus&lt;br /&gt;
&lt;br /&gt;
install -d -o prometheus -g prometheus \&lt;br /&gt;
  /etc/prometheus \&lt;br /&gt;
  /var/lib/prometheus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prometheus 바이너리는 공식 릴리스에서 다운로드하고 checksum 확인 후 설치한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -m 0755 prometheus /usr/local/bin/prometheus&lt;br /&gt;
install -m 0755 promtool /usr/local/bin/promtool&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 11.2 Prometheus 설정 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/prometheus/prometheus.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
global:&lt;br /&gt;
  scrape_interval: 30s&lt;br /&gt;
&lt;br /&gt;
scrape_configs:&lt;br /&gt;
&lt;br /&gt;
  - job_name: prometheus&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;127.0.0.1:9090&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: monitoring-server&lt;br /&gt;
&lt;br /&gt;
  - job_name: node&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;127.0.0.1:9100&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: monitoring-server&lt;br /&gt;
&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;192.0.2.20:9100&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: linux-server&lt;br /&gt;
&lt;br /&gt;
  - job_name: windows&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;192.0.2.30:9182&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: windows-server&lt;br /&gt;
&lt;br /&gt;
  - job_name: qnap&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets:&lt;br /&gt;
          - &amp;quot;198.51.100.10:9100&amp;quot;&lt;br /&gt;
        labels:&lt;br /&gt;
          server_name: nas-01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 11.3 systemd ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/systemd/system/prometheus.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Prometheus&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
After=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
User=prometheus&lt;br /&gt;
Group=prometheus&lt;br /&gt;
&lt;br /&gt;
ExecStart=/usr/local/bin/prometheus \&lt;br /&gt;
  --config.file=/etc/prometheus/prometheus.yml \&lt;br /&gt;
  --storage.tsdb.path=/var/lib/prometheus \&lt;br /&gt;
  --storage.tsdb.retention.time=30d \&lt;br /&gt;
  --storage.tsdb.retention.size=20GB \&lt;br /&gt;
  --web.listen-address=127.0.0.1:9090&lt;br /&gt;
&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chown -R prometheus:prometheus \&lt;br /&gt;
  /etc/prometheus \&lt;br /&gt;
  /var/lib/prometheus&lt;br /&gt;
&lt;br /&gt;
promtool check config /etc/prometheus/prometheus.yml&lt;br /&gt;
&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now prometheus&lt;br /&gt;
&lt;br /&gt;
systemctl status prometheus --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 12. Node Exporter 설치 ==&lt;br /&gt;
&lt;br /&gt;
실제 구축에서는 Node Exporter 1.12.1 환경을 사용하였다.&lt;br /&gt;
&lt;br /&gt;
=== 12.1 Linux Node Exporter ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
useradd \&lt;br /&gt;
  --system \&lt;br /&gt;
  --no-create-home \&lt;br /&gt;
  --shell /sbin/nologin \&lt;br /&gt;
  node_exporter&lt;br /&gt;
&lt;br /&gt;
install -m 0755 node_exporter \&lt;br /&gt;
  /usr/local/bin/node_exporter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/systemd/system/node_exporter.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Node Exporter&lt;br /&gt;
After=network-online.target&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
User=node_exporter&lt;br /&gt;
Group=node_exporter&lt;br /&gt;
&lt;br /&gt;
ExecStart=/usr/local/bin/node_exporter&lt;br /&gt;
&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now node_exporter&lt;br /&gt;
&lt;br /&gt;
curl -s http://127.0.0.1:9100/metrics | head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
외부 서버의 node_exporter는 Prometheus 서버 주소만 9100/tcp에 접근하도록 방화벽을 제한한다.&lt;br /&gt;
&lt;br /&gt;
== 13. Windows Exporter ==&lt;br /&gt;
&lt;br /&gt;
Windows Server에서는 windows_exporter를 사용한다.&lt;br /&gt;
&lt;br /&gt;
기본 포트:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
9182/tcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prometheus Target:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
192.0.2.30:9182&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
성능 카운터 이상 시 다음 명령으로 복구한 사례가 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
lodctr /R&lt;br /&gt;
winmgmt /resyncperf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PowerShell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Restart-Service windows_exporter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Invoke-WebRequest http://127.0.0.1:9182/metrics&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 14. Grafana Prometheus Datasource ==&lt;br /&gt;
&lt;br /&gt;
Grafana:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Connections&lt;br /&gt;
  → Data sources&lt;br /&gt;
  → Prometheus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
http://127.0.0.1:9090&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save &amp;amp; Test 후 다음 PromQL로 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 15. Server Dashboard 구성 ==&lt;br /&gt;
&lt;br /&gt;
Linux Dashboard:&lt;br /&gt;
&lt;br /&gt;
* Uptime&lt;br /&gt;
* CPU Usage&lt;br /&gt;
* Memory Usage&lt;br /&gt;
* Load Average&lt;br /&gt;
* Filesystem&lt;br /&gt;
* Disk Read / Write&lt;br /&gt;
* Network RX / TX&lt;br /&gt;
* Network Error / Drop&lt;br /&gt;
* Service 상태&lt;br /&gt;
&lt;br /&gt;
Windows Dashboard:&lt;br /&gt;
&lt;br /&gt;
* CPU&lt;br /&gt;
* Memory&lt;br /&gt;
* Disk&lt;br /&gt;
* Network&lt;br /&gt;
* Uptime&lt;br /&gt;
* Exporter 상태&lt;br /&gt;
&lt;br /&gt;
Disk 용량은 실제 GB/GiB 값으로 표시하며 불필요한 Bar Gauge는 제거한다.&lt;br /&gt;
&lt;br /&gt;
== 16. QNAP TS-264 모니터링 ==&lt;br /&gt;
&lt;br /&gt;
QNAP은 세 종류의 데이터를 함께 사용한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 데이터&lt;br /&gt;
! 수집 방법&lt;br /&gt;
|-&lt;br /&gt;
| CPU / Memory / Network / Filesystem / Disk I/O&lt;br /&gt;
| node_exporter → Prometheus&lt;br /&gt;
|-&lt;br /&gt;
| HDD / RAID / Storage / Volume&lt;br /&gt;
| SNMP → Telegraf → InfluxDB&lt;br /&gt;
|-&lt;br /&gt;
| Event / Access Log&lt;br /&gt;
| Syslog → rsyslog → Alloy → Loki&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 16.1 QNAP SNMP ===&lt;br /&gt;
&lt;br /&gt;
QNAP SNMPv3:&lt;br /&gt;
&lt;br /&gt;
* SHA&lt;br /&gt;
* DES&lt;br /&gt;
&lt;br /&gt;
Measurement:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
QNAP_TS264&lt;br /&gt;
qnap_disk&lt;br /&gt;
qnap_raid&lt;br /&gt;
qnap_storage_pool&lt;br /&gt;
qnap_volume&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disk:&lt;br /&gt;
&lt;br /&gt;
* disk_id&lt;br /&gt;
* manufacturer&lt;br /&gt;
* model&lt;br /&gt;
* disk_type&lt;br /&gt;
* disk_status&lt;br /&gt;
* temperature&lt;br /&gt;
* capacity_bytes&lt;br /&gt;
&lt;br /&gt;
RAID:&lt;br /&gt;
&lt;br /&gt;
* RAID ID&lt;br /&gt;
* RAID Name&lt;br /&gt;
* RAID Status&lt;br /&gt;
* RAID Level&lt;br /&gt;
* Capacity&lt;br /&gt;
&lt;br /&gt;
=== 16.2 Volume 단위 보정 ===&lt;br /&gt;
&lt;br /&gt;
QNAP qnap_volume의 capacity/free 값은 실제 장비에서 KiB 형태로 반환되는 것으로 확인되었다.&lt;br /&gt;
&lt;br /&gt;
원시값을 Grafana에서 byte로 바로 해석하면 약 11.3 GiB로 잘못 표시된다.&lt;br /&gt;
&lt;br /&gt;
Flux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
|&amp;gt; map(fn: (r) =&amp;gt; ({&lt;br /&gt;
    r with&lt;br /&gt;
    capacity_bytes:&lt;br /&gt;
      uint(v: r.capacity_bytes) * uint(v: 1024),&lt;br /&gt;
&lt;br /&gt;
    free_bytes:&lt;br /&gt;
      uint(v: r.free_bytes) * uint(v: 1024),&lt;br /&gt;
&lt;br /&gt;
    used_bytes:&lt;br /&gt;
      (&lt;br /&gt;
        uint(v: r.capacity_bytes)&lt;br /&gt;
        - uint(v: r.free_bytes)&lt;br /&gt;
      ) * uint(v: 1024),&lt;br /&gt;
&lt;br /&gt;
    used_percent:&lt;br /&gt;
      if float(v: r.capacity_bytes) &amp;gt; 0.0 then&lt;br /&gt;
        (&lt;br /&gt;
          float(v: r.capacity_bytes)&lt;br /&gt;
          - float(v: r.free_bytes)&lt;br /&gt;
        )&lt;br /&gt;
        / float(v: r.capacity_bytes)&lt;br /&gt;
        * 100.0&lt;br /&gt;
      else 0.0&lt;br /&gt;
}))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16.3 실제 Data Volume ===&lt;br /&gt;
&lt;br /&gt;
Node Exporter 기준 실제 사용자 Data Volume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mountpoint=&amp;quot;/share/CACHEDEV1_DATA&amp;quot;&lt;br /&gt;
device=&amp;quot;/dev/mapper/cachedev1&amp;quot;&lt;br /&gt;
fstype=&amp;quot;ext4&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Snapshot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/mnt/snapshot/...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 Snapshot 경로는 Dashboard Filesystem 패널에서 제외한다.&lt;br /&gt;
&lt;br /&gt;
DataVol1 사용률:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
100 * (&lt;br /&gt;
  1 -&lt;br /&gt;
  node_filesystem_avail_bytes{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    mountpoint=&amp;quot;/share/CACHEDEV1_DATA&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  /&lt;br /&gt;
  node_filesystem_size_bytes{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    mountpoint=&amp;quot;/share/CACHEDEV1_DATA&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16.4 Network는 bond0만 표시 ===&lt;br /&gt;
&lt;br /&gt;
RX:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_network_receive_bytes_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
) * 8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TX:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(&lt;br /&gt;
  node_network_transmit_bytes_total{&lt;br /&gt;
    instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
    device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
  }[$__rate_interval]&lt;br /&gt;
) * 8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16.5 Network Error / Drop ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(node_network_receive_errs_total{&lt;br /&gt;
  instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
  device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
}[$__rate_interval])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(node_network_transmit_errs_total{&lt;br /&gt;
  instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
  device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
}[$__rate_interval])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(node_network_receive_drop_total{&lt;br /&gt;
  instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
  device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
}[$__rate_interval])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(node_network_transmit_drop_total{&lt;br /&gt;
  instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
  device=&amp;quot;bond0&amp;quot;&lt;br /&gt;
}[$__rate_interval])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16.6 Disk I/O ===&lt;br /&gt;
&lt;br /&gt;
Read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(node_disk_read_bytes_total{&lt;br /&gt;
  instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
  device=~&amp;quot;sd[a-z]+&amp;quot;&lt;br /&gt;
}[$__rate_interval])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(node_disk_written_bytes_total{&lt;br /&gt;
  instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
  device=~&amp;quot;sd[a-z]+&amp;quot;&lt;br /&gt;
}[$__rate_interval])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read IOPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(node_disk_reads_completed_total{&lt;br /&gt;
  instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
  device=~&amp;quot;sd[a-z]+&amp;quot;&lt;br /&gt;
}[$__rate_interval])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Write IOPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rate(node_disk_writes_completed_total{&lt;br /&gt;
  instance=&amp;quot;198.51.100.10:9100&amp;quot;,&lt;br /&gt;
  device=~&amp;quot;sd[a-z]+&amp;quot;&lt;br /&gt;
}[$__rate_interval])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 17. rsyslog 구성 ==&lt;br /&gt;
&lt;br /&gt;
=== 17.1 Network Syslog ===&lt;br /&gt;
&lt;br /&gt;
예시 로그 파일:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/var/log/network-syslog/events.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네트워크 장비:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
UDP/TCP 514&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 17.2 Server Syslog ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/var/log/server-syslog/events.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예시 포트:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
5514/tcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 17.3 QNAP Event / Access 분리 ===&lt;br /&gt;
&lt;br /&gt;
QNAP 로그는 Event와 Access를 별도 포트로 분리한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 로그&lt;br /&gt;
! Port&lt;br /&gt;
! File&lt;br /&gt;
|-&lt;br /&gt;
| Event&lt;br /&gt;
| TCP 5515&lt;br /&gt;
| /var/log/qnap/event.log&lt;br /&gt;
|-&lt;br /&gt;
| Access&lt;br /&gt;
| TCP 5516&lt;br /&gt;
| /var/log/qnap/access.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
template(name=&amp;quot;QnapSyslogLine&amp;quot; type=&amp;quot;string&amp;quot;&lt;br /&gt;
  string=&amp;quot;%timegenerated:::date-rfc3339% src=%fromhost-ip% severity=%syslogseverity-text% host=%hostname% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Event:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ruleset(name=&amp;quot;QnapEventLog&amp;quot;) {&lt;br /&gt;
    action(&lt;br /&gt;
        type=&amp;quot;omfile&amp;quot;&lt;br /&gt;
        file=&amp;quot;/var/log/qnap/event.log&amp;quot;&lt;br /&gt;
        template=&amp;quot;QnapSyslogLine&amp;quot;&lt;br /&gt;
        fileOwner=&amp;quot;root&amp;quot;&lt;br /&gt;
        fileGroup=&amp;quot;alloy&amp;quot;&lt;br /&gt;
        fileCreateMode=&amp;quot;0640&amp;quot;&lt;br /&gt;
        dirOwner=&amp;quot;root&amp;quot;&lt;br /&gt;
        dirGroup=&amp;quot;alloy&amp;quot;&lt;br /&gt;
        dirCreateMode=&amp;quot;0750&amp;quot;&lt;br /&gt;
        createDirs=&amp;quot;on&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    stop&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
input(&lt;br /&gt;
    type=&amp;quot;imtcp&amp;quot;&lt;br /&gt;
    port=&amp;quot;5515&amp;quot;&lt;br /&gt;
    ruleset=&amp;quot;QnapEventLog&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Access:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ruleset(name=&amp;quot;QnapAccessLog&amp;quot;) {&lt;br /&gt;
    action(&lt;br /&gt;
        type=&amp;quot;omfile&amp;quot;&lt;br /&gt;
        file=&amp;quot;/var/log/qnap/access.log&amp;quot;&lt;br /&gt;
        template=&amp;quot;QnapSyslogLine&amp;quot;&lt;br /&gt;
        fileOwner=&amp;quot;root&amp;quot;&lt;br /&gt;
        fileGroup=&amp;quot;alloy&amp;quot;&lt;br /&gt;
        fileCreateMode=&amp;quot;0640&amp;quot;&lt;br /&gt;
        dirOwner=&amp;quot;root&amp;quot;&lt;br /&gt;
        dirGroup=&amp;quot;alloy&amp;quot;&lt;br /&gt;
        dirCreateMode=&amp;quot;0750&amp;quot;&lt;br /&gt;
        createDirs=&amp;quot;on&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    stop&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
input(&lt;br /&gt;
    type=&amp;quot;imtcp&amp;quot;&lt;br /&gt;
    port=&amp;quot;5516&amp;quot;&lt;br /&gt;
    ruleset=&amp;quot;QnapAccessLog&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
검증:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rsyslogd -N1&lt;br /&gt;
systemctl restart rsyslog&lt;br /&gt;
&lt;br /&gt;
ss -lntp | grep -E &#039;:5514|:5515|:5516&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 18. Loki / Alloy 구성 ==&lt;br /&gt;
&lt;br /&gt;
Loki Endpoint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
http://127.0.0.1:3100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alloy UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
127.0.0.1:12345&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 18.1 Alloy 기본 설정 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
logging {&lt;br /&gt;
  level = &amp;quot;info&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 18.2 Network Syslog ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.source.file &amp;quot;network_syslog&amp;quot; {&lt;br /&gt;
  targets = [&lt;br /&gt;
    {&lt;br /&gt;
      __path__ = &amp;quot;/var/log/network-syslog/events.log&amp;quot;,&lt;br /&gt;
      job      = &amp;quot;network-syslog&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
  forward_to = [loki.process.network_syslog.receiver]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loki.process &amp;quot;network_syslog&amp;quot; {&lt;br /&gt;
  stage.regex {&lt;br /&gt;
    expression = `^(?P&amp;lt;received_at&amp;gt;\S+) src=(?P&amp;lt;device_ip&amp;gt;\S+) severity=(?P&amp;lt;severity&amp;gt;\S+) host=(?P&amp;lt;device_host&amp;gt;\S+) (?P&amp;lt;message&amp;gt;.*)$`&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.timestamp {&lt;br /&gt;
    source            = &amp;quot;received_at&amp;quot;&lt;br /&gt;
    format            = &amp;quot;RFC3339Nano&amp;quot;&lt;br /&gt;
    action_on_failure = &amp;quot;skip&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.labels {&lt;br /&gt;
    values = {&lt;br /&gt;
      device_ip = &amp;quot;&amp;quot;,&lt;br /&gt;
      severity  = &amp;quot;&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  forward_to = [loki.write.local.receiver]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 18.3 Server Syslog ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.source.file &amp;quot;server_syslog&amp;quot; {&lt;br /&gt;
  targets = [&lt;br /&gt;
    {&lt;br /&gt;
      __path__ = &amp;quot;/var/log/server-syslog/events.log&amp;quot;,&lt;br /&gt;
      job      = &amp;quot;server-syslog&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
  forward_to = [loki.process.server_syslog.receiver]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loki.process &amp;quot;server_syslog&amp;quot; {&lt;br /&gt;
  stage.regex {&lt;br /&gt;
    expression = `^(?P&amp;lt;received_at&amp;gt;\S+) src=(?P&amp;lt;server_ip&amp;gt;\S+) severity=(?P&amp;lt;severity&amp;gt;\S+) host=(?P&amp;lt;server_host&amp;gt;\S+) (?P&amp;lt;source&amp;gt;[^:\s\[]+)(?:\[\d+\])?:?\s+(?P&amp;lt;message&amp;gt;.*)$`&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.timestamp {&lt;br /&gt;
    source            = &amp;quot;received_at&amp;quot;&lt;br /&gt;
    format            = &amp;quot;RFC3339Nano&amp;quot;&lt;br /&gt;
    action_on_failure = &amp;quot;skip&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.labels {&lt;br /&gt;
    values = {&lt;br /&gt;
      server_ip   = &amp;quot;&amp;quot;,&lt;br /&gt;
      server_host = &amp;quot;&amp;quot;,&lt;br /&gt;
      severity    = &amp;quot;&amp;quot;,&lt;br /&gt;
      source      = &amp;quot;&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  forward_to = [loki.write.local.receiver]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 18.4 QNAP Event ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.source.file &amp;quot;qnap_event&amp;quot; {&lt;br /&gt;
  targets = [&lt;br /&gt;
    {&lt;br /&gt;
      __path__ = &amp;quot;/var/log/qnap/event.log&amp;quot;,&lt;br /&gt;
      job      = &amp;quot;qnap-event&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
  forward_to = [loki.process.qnap_event.receiver]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loki.process &amp;quot;qnap_event&amp;quot; {&lt;br /&gt;
  stage.regex {&lt;br /&gt;
    expression = `^(?P&amp;lt;received_at&amp;gt;\S+) src=(?P&amp;lt;nas_ip&amp;gt;\S+) severity=(?P&amp;lt;severity&amp;gt;\S+) host=(?P&amp;lt;nas_host&amp;gt;\S+) (?P&amp;lt;message&amp;gt;.*)$`&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.timestamp {&lt;br /&gt;
    source            = &amp;quot;received_at&amp;quot;&lt;br /&gt;
    format            = &amp;quot;RFC3339Nano&amp;quot;&lt;br /&gt;
    action_on_failure = &amp;quot;skip&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.labels {&lt;br /&gt;
    values = {&lt;br /&gt;
      nas_ip   = &amp;quot;&amp;quot;,&lt;br /&gt;
      nas_host = &amp;quot;&amp;quot;,&lt;br /&gt;
      severity = &amp;quot;&amp;quot;,&lt;br /&gt;
      log_type = &amp;quot;event&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  forward_to = [loki.write.local.receiver]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 18.5 QNAP Access ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.source.file &amp;quot;qnap_access&amp;quot; {&lt;br /&gt;
  targets = [&lt;br /&gt;
    {&lt;br /&gt;
      __path__ = &amp;quot;/var/log/qnap/access.log&amp;quot;,&lt;br /&gt;
      job      = &amp;quot;qnap-access&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
  forward_to = [loki.process.qnap_access.receiver]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loki.process &amp;quot;qnap_access&amp;quot; {&lt;br /&gt;
  stage.regex {&lt;br /&gt;
    expression = `^(?P&amp;lt;received_at&amp;gt;\S+) src=(?P&amp;lt;nas_ip&amp;gt;\S+) severity=(?P&amp;lt;severity&amp;gt;\S+) host=(?P&amp;lt;nas_host&amp;gt;\S+) (?P&amp;lt;message&amp;gt;.*)$`&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.timestamp {&lt;br /&gt;
    source            = &amp;quot;received_at&amp;quot;&lt;br /&gt;
    format            = &amp;quot;RFC3339Nano&amp;quot;&lt;br /&gt;
    action_on_failure = &amp;quot;skip&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  stage.labels {&lt;br /&gt;
    values = {&lt;br /&gt;
      nas_ip   = &amp;quot;&amp;quot;,&lt;br /&gt;
      nas_host = &amp;quot;&amp;quot;,&lt;br /&gt;
      severity = &amp;quot;&amp;quot;,&lt;br /&gt;
      log_type = &amp;quot;access&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  forward_to = [loki.write.local.receiver]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 18.6 Loki Write ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
loki.write &amp;quot;local&amp;quot; {&lt;br /&gt;
  endpoint {&lt;br /&gt;
    url = &amp;quot;http://127.0.0.1:3100/loki/api/v1/push&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
검증:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
alloy validate /etc/alloy/config.alloy&lt;br /&gt;
&lt;br /&gt;
systemctl restart alloy&lt;br /&gt;
&lt;br /&gt;
systemctl status alloy --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loki Job 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -s \&lt;br /&gt;
  &#039;http://127.0.0.1:3100/loki/api/v1/label/job/values&#039; \&lt;br /&gt;
  | jq&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
정상 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
network-syslog&lt;br /&gt;
server-syslog&lt;br /&gt;
qnap-event&lt;br /&gt;
qnap-access&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 18.7 Alloy Permission 문제 ===&lt;br /&gt;
&lt;br /&gt;
다음과 같은 오류가 발생할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
failed to tail file&lt;br /&gt;
stat failed&lt;br /&gt;
permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
namei -l /var/log/qnap/access.log&lt;br /&gt;
&lt;br /&gt;
systemctl show alloy \&lt;br /&gt;
  -p User \&lt;br /&gt;
  -p Group&lt;br /&gt;
&lt;br /&gt;
sudo -u alloy \&lt;br /&gt;
  head /var/log/qnap/access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
권장 권한:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
drwxr-x--- root alloy /var/log/qnap&lt;br /&gt;
-rw-r----- root alloy /var/log/qnap/access.log&lt;br /&gt;
-rw-r----- root alloy /var/log/qnap/event.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELinux 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
getenforce&lt;br /&gt;
&lt;br /&gt;
ausearch -m AVC -ts recent \&lt;br /&gt;
  | grep -Ei &#039;alloy|qnap&#039;&lt;br /&gt;
&lt;br /&gt;
ls -Zd /var/log/qnap&lt;br /&gt;
ls -Z /var/log/qnap/access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 19. Loki Query ==&lt;br /&gt;
&lt;br /&gt;
Network:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
{job=&amp;quot;network-syslog&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
{job=&amp;quot;server-syslog&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QNAP Event:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
{job=&amp;quot;qnap-event&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QNAP Access:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
{job=&amp;quot;qnap-access&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Critical Network Syslog:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
{job=&amp;quot;network-syslog&amp;quot;,severity=~&amp;quot;emerg|alert|crit|err&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 20. Grafana Syslog Alert ==&lt;br /&gt;
&lt;br /&gt;
Syslog Level 3 이상:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
sum by (device_ip, severity) (&lt;br /&gt;
  count_over_time(&lt;br /&gt;
    {&lt;br /&gt;
      job=&amp;quot;network-syslog&amp;quot;,&lt;br /&gt;
      severity=~&amp;quot;emerg|alert|crit|err&amp;quot;&lt;br /&gt;
    }[1m]&lt;br /&gt;
  )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
권장 Alert 구조:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
A = Loki Instant Query&lt;br /&gt;
B = Threshold&lt;br /&gt;
    A IS ABOVE 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Summary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Syslog 경고] {{ $labels.device_ip }} - {{ $labels.severity }}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Description:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
장비 {{ $labels.device_ip }} 에서 Syslog Level 3(Error) 이상의 로그가 발생했습니다.&lt;br /&gt;
최근 1분 발생 건수: {{ $values.A.Value }}&lt;br /&gt;
Severity: {{ $labels.severity }}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Range Query를 그대로 Alert 조건으로 사용할 경우 다음 오류가 발생할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
invalid format of evaluation results for the alert definition A:&lt;br /&gt;
looks like time series data, only reduced data can be alerted on.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Range Query를 유지할 경우 Reduce Expression을 추가해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 21. ICMP Alert ==&lt;br /&gt;
&lt;br /&gt;
Flux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: -5m)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt;&lt;br /&gt;
    r._measurement == &amp;quot;ping&amp;quot; and&lt;br /&gt;
    r._field == &amp;quot;percent_packet_loss&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  |&amp;gt; group(columns: [&amp;quot;url&amp;quot;])&lt;br /&gt;
  |&amp;gt; last()&lt;br /&gt;
  |&amp;gt; keep(columns: [&amp;quot;_time&amp;quot;, &amp;quot;_value&amp;quot;, &amp;quot;url&amp;quot;])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
A = Flux Query&lt;br /&gt;
B = Reduce / Last / Strict&lt;br /&gt;
C = Threshold &amp;gt; 99&lt;br /&gt;
Pending = 2m&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No Data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Keep Last State&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 22. 최종 Dashboard 구성안 ==&lt;br /&gt;
&lt;br /&gt;
=== 22.1 Network Switch Dashboard ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Row&lt;br /&gt;
! Panels&lt;br /&gt;
|-&lt;br /&gt;
| 상태&lt;br /&gt;
| Device / Uptime / CPU / Memory / Ping&lt;br /&gt;
|-&lt;br /&gt;
| Port 상태&lt;br /&gt;
| ifName / Alias / Speed / OperStatus&lt;br /&gt;
|-&lt;br /&gt;
| Traffic&lt;br /&gt;
| RX bps / TX bps&lt;br /&gt;
|-&lt;br /&gt;
| Packet&lt;br /&gt;
| Unicast / Broadcast / Multicast PPS&lt;br /&gt;
|-&lt;br /&gt;
| Error&lt;br /&gt;
| RX/TX Error / Discard&lt;br /&gt;
|-&lt;br /&gt;
| Syslog&lt;br /&gt;
| Warning / Error / Critical Event&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 22.2 Linux Server Dashboard ===&lt;br /&gt;
&lt;br /&gt;
* Uptime&lt;br /&gt;
* CPU&lt;br /&gt;
* Memory&lt;br /&gt;
* Load&lt;br /&gt;
* Disk Capacity&lt;br /&gt;
* Disk I/O&lt;br /&gt;
* Network RX/TX&lt;br /&gt;
* Network Error/Drop&lt;br /&gt;
* Service Log&lt;br /&gt;
* Security Event&lt;br /&gt;
&lt;br /&gt;
=== 22.3 Windows Dashboard ===&lt;br /&gt;
&lt;br /&gt;
* Uptime&lt;br /&gt;
* CPU&lt;br /&gt;
* Memory&lt;br /&gt;
* Logical Disk&lt;br /&gt;
* Disk I/O&lt;br /&gt;
* Network&lt;br /&gt;
* Windows Exporter 상태&lt;br /&gt;
&lt;br /&gt;
=== 22.4 QNAP Dashboard ===&lt;br /&gt;
&lt;br /&gt;
최종 구성:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
Node Exporter&lt;br /&gt;
Uptime&lt;br /&gt;
CPU&lt;br /&gt;
Memory&lt;br /&gt;
HDD 최고 온도&lt;br /&gt;
&lt;br /&gt;
CPU / Memory / Load&lt;br /&gt;
&lt;br /&gt;
Network RX / TX&lt;br /&gt;
  - bond0 only&lt;br /&gt;
&lt;br /&gt;
Disk 상태&lt;br /&gt;
&lt;br /&gt;
Volume&lt;br /&gt;
  - DataVol1&lt;br /&gt;
  - SNMP capacity/free x1024 보정&lt;br /&gt;
&lt;br /&gt;
Filesystem 사용률&lt;br /&gt;
  - /share/CACHEDEV1_DATA only&lt;br /&gt;
  - Snapshot 제외&lt;br /&gt;
&lt;br /&gt;
Network Errors / Drops&lt;br /&gt;
  - bond0 RX Error&lt;br /&gt;
  - bond0 TX Error&lt;br /&gt;
  - bond0 RX Drop&lt;br /&gt;
  - bond0 TX Drop&lt;br /&gt;
&lt;br /&gt;
Disk I/O&lt;br /&gt;
  - Physical sd* only&lt;br /&gt;
  - Read B/s&lt;br /&gt;
  - Write B/s&lt;br /&gt;
  - Read IOPS&lt;br /&gt;
  - Write IOPS&lt;br /&gt;
&lt;br /&gt;
QNAP Event Log&lt;br /&gt;
&lt;br /&gt;
QNAP Access Log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QNAP Dashboard에서 제거한 항목:&lt;br /&gt;
&lt;br /&gt;
* 상단 RAID 상태&lt;br /&gt;
* Storage Pool 상태&lt;br /&gt;
* Storage Pool 사용률&lt;br /&gt;
* RAID 상세 Table&lt;br /&gt;
* Storage Pool 상세 Table&lt;br /&gt;
&lt;br /&gt;
RAID/Storage Pool 정보는 필요 시 별도 상세 Dashboard에서 조회한다.&lt;br /&gt;
&lt;br /&gt;
== 23. 운영 점검 ==&lt;br /&gt;
&lt;br /&gt;
전체 서비스:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl is-active \&lt;br /&gt;
  influxdb \&lt;br /&gt;
  telegraf \&lt;br /&gt;
  grafana-server \&lt;br /&gt;
  prometheus \&lt;br /&gt;
  loki \&lt;br /&gt;
  alloy \&lt;br /&gt;
  rsyslog \&lt;br /&gt;
  chronyd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Listening Port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ss -lntup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prometheus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -s http://127.0.0.1:9090/-/healthy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loki:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -s http://127.0.0.1:3100/ready&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Telegraf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
journalctl -u telegraf \&lt;br /&gt;
  --since &#039;-10 min&#039; \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alloy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
journalctl -u alloy \&lt;br /&gt;
  --since &#039;-10 min&#039; \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Filesystem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
df -hT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
System I/O:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vmstat 1 5&lt;br /&gt;
iostat -xz 1 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 24. 장애 점검 순서 ==&lt;br /&gt;
&lt;br /&gt;
=== Prometheus Target Down ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl http://TARGET_IP:9100/metrics&lt;br /&gt;
&lt;br /&gt;
journalctl -u prometheus \&lt;br /&gt;
  -n 100 \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SNMP Timeout ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
snmpget -v3 \&lt;br /&gt;
  -t 5 \&lt;br /&gt;
  -r 1 \&lt;br /&gt;
  -On \&lt;br /&gt;
  SWITCH_IP \&lt;br /&gt;
  .1.3.6.1.2.1.1.3.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
확인 항목:&lt;br /&gt;
&lt;br /&gt;
* SNMP User&lt;br /&gt;
* SHA/DES/AES 조합&lt;br /&gt;
* ACL&lt;br /&gt;
* Source IP&lt;br /&gt;
* Timeout&lt;br /&gt;
* SNMP View&lt;br /&gt;
* 장비 CPU&lt;br /&gt;
&lt;br /&gt;
=== Syslog 미수신 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ss -lntup \&lt;br /&gt;
  | grep -E &#039;:514|:5514|:5515|:5516&#039;&lt;br /&gt;
&lt;br /&gt;
tcpdump -ni any \&lt;br /&gt;
  host DEVICE_IP&lt;br /&gt;
&lt;br /&gt;
tail -f /var/log/qnap/access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loki 미표시 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
alloy validate \&lt;br /&gt;
  /etc/alloy/config.alloy&lt;br /&gt;
&lt;br /&gt;
journalctl -u alloy \&lt;br /&gt;
  -n 100 \&lt;br /&gt;
  --no-pager&lt;br /&gt;
&lt;br /&gt;
curl -s \&lt;br /&gt;
  &#039;http://127.0.0.1:3100/loki/api/v1/label/job/values&#039; \&lt;br /&gt;
  | jq&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 25. 운영 원칙 ==&lt;br /&gt;
&lt;br /&gt;
* SNMP Metric은 Telegraf → InfluxDB로 저장한다.&lt;br /&gt;
* Host Metric은 Prometheus로 저장한다.&lt;br /&gt;
* Syslog는 rsyslog → Alloy → Loki로 저장한다.&lt;br /&gt;
* Grafana는 세 데이터소스를 통합한다.&lt;br /&gt;
* SNMP Counter는 누적값을 그대로 표시하지 않고 rate/derivative 계산한다.&lt;br /&gt;
* No Data를 0 또는 정상으로 강제 표시하지 않는다.&lt;br /&gt;
* QNAP Snapshot filesystem은 Data Volume 사용률에서 제외한다.&lt;br /&gt;
* QNAP Volume SNMP capacity/free 값은 장비 특성상 ×1024 보정한다.&lt;br /&gt;
* QNAP Network는 실제 활성 bond0만 표시한다.&lt;br /&gt;
* Loki message 전체를 label로 만들지 않는다.&lt;br /&gt;
* 장비 Syslog Alert는 device_ip / severity와 발생 건수를 메일에 포함한다.&lt;br /&gt;
* Alert의 Range Query는 Reduce 또는 Instant Query 구조로 구성한다.&lt;br /&gt;
* 모든 Token 및 SNMP 비밀번호는 문서에 실제 값을 기록하지 않는다.&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=SNMP%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%84%9C%EB%B2%84&amp;diff=118</id>
		<title>SNMP테스트서버</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=SNMP%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%84%9C%EB%B2%84&amp;diff=118"/>
		<updated>2026-09-10T02:32:53Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Rocky Linux 9 · Zyxel 스위치 IPT 장애 모니터링 서버 구성 가이드 =&lt;br /&gt;
&lt;br /&gt;
작성일: 2026-09-10 · 구성안 v1.0&lt;br /&gt;
&lt;br /&gt;
== 0. 목적·범위·검증 수준 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;목적:&#039;&#039;&#039; Zyxel L3/L2 → PoE 전화기 → PC 환경에서 전화 연결 실패 시 네트워크 혼잡·패킷 폐기·링크/PoE 이벤트가 동반되는지 기록한다. 콜서버의 TCP/UDP 5060 tcpdump는 별도로 수행하며 이 문서는 해당 설정을 변경하지 않는다.&lt;br /&gt;
&lt;br /&gt;
* [확정] KVM VM / Rocky Linux 9, Zyxel L3/L2, 전화기 뒤 PC 연결, 콜서버 SIP 캡처 병행 계획.&lt;br /&gt;
* [미확인] 스위치 모델·펌웨어·대수·주소·Voice VLAN·콜서버 경로, SNMPv3 알고리즘, sFlow 지원, CPU/PoE 전용 OID.&lt;br /&gt;
* [제안] 먼저 &#039;&#039;&#039;Telegraf + InfluxDB OSS 2.x + Grafana OSS + rsyslog&#039;&#039;&#039;를 RPM/systemd로 직접 설치한다. 전체 포트 30초, 의심 포트/업링크 5초에서 시작하고 필요한 포트만 1초로 단축한다.&lt;br /&gt;
* &#039;&#039;&#039;sFlow는 조건부 단계:&#039;&#039;&#039; Akvorado가 후보지만 모델의 exporter 지원과 배포 릴리스 설정이 확정되지 않았으므로 §12는 준비·배포 검토·수신 검증 절차다. 아직 운영 기동을 보장하는 완성 설정이 아니다. SNMP/Syslog 기본 구성은 독립적으로 진행 가능하다.&lt;br /&gt;
* 실제 Rocky VM·Zyxel 장비에서 실행 시험한 문서는 아니다. 구성 예시를 정적 점검했으며 각 단계의 현장 검증을 통과한 후 진행한다.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 1. 구조와 준비값 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 서비스&lt;br /&gt;
! 설치 방식&lt;br /&gt;
! 연결/저장&lt;br /&gt;
|-&lt;br /&gt;
| Telegraf 1.x&lt;br /&gt;
| RPM / telegraf.service&lt;br /&gt;
| 스위치 UDP/161 조회 → 로컬 InfluxDB&lt;br /&gt;
|-&lt;br /&gt;
| InfluxDB OSS 2.x&lt;br /&gt;
| RPM / influxdb.service&lt;br /&gt;
| 127.0.0.1:8086, 30일 raw bucket&lt;br /&gt;
|-&lt;br /&gt;
| Grafana OSS&lt;br /&gt;
| RPM / grafana-server.service&lt;br /&gt;
| 127.0.0.1:3000, SSH 터널 접속&lt;br /&gt;
|-&lt;br /&gt;
| rsyslog 8.x&lt;br /&gt;
| Rocky RPM / rsyslog.service&lt;br /&gt;
| UDP/514 → /var/log/zyxel/&amp;amp;lt;송신IP&amp;amp;gt;/events.log&lt;br /&gt;
|-&lt;br /&gt;
| Akvorado 배포 스택&lt;br /&gt;
| 별도 검토 후 공식 Docker Compose&lt;br /&gt;
| sFlow UDP/6343 → ClickHouse 등&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SNMP Trap UDP/162는 이번 기본 구성에 포함하지 않는다. Rocky를 조회하는 SNMP agent인 &amp;lt;code&amp;gt;snmpd&amp;lt;/code&amp;gt;도 불필요하다. 이 서버는 SNMP 조회자다.&lt;br /&gt;
&lt;br /&gt;
=== 준비표 — 모든 &amp;lt;code&amp;gt;&amp;amp;lt;...&amp;amp;gt;&amp;lt;/code&amp;gt;를 실제 값으로 교체 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 자리표시자&lt;br /&gt;
! 의미&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;COLLECTOR_IP&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Rocky VM 고정 IPv4&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;FW_ZONE&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| 관리 NIC에 실제 적용된 firewalld zone&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;SWITCH_SOURCE_CIDR&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| 실제 Syslog 송신 IP /32 또는 승인된 스위치 관리 대역&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;SWITCH_IP&amp;amp;gt;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;&amp;amp;lt;SWITCH_NAME&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| 수집 대상 관리 IP / 식별 이름&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;IFINDEX&amp;amp;gt;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;&amp;amp;lt;PORT_LABEL&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| SNMP 조회로 확인한 인덱스 / 포트명&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;CALLSERVER_IP&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| 콜서버 IP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;SNMP_USER&amp;amp;gt;&amp;lt;/code&amp;gt; 등&lt;br /&gt;
| 읽기 전용 SNMPv3 계정·인증값&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;NTP_SERVER&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| 콜서버/스위치와 맞춘 승인된 시간 서버&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
소규모 시작 가정: 기본 구성 4 vCPU / RAM 8GB / SSD 100~200GB. Akvorado 동시 운영은 8 vCPU / RAM 16~32GB / SSD 300~500GB부터 부하 시험한다. 이는 보장 사양이 아니며 포트 수·샘플 PPS·저장량으로 조정한다. KVM CPU 과할당, 메모리 ballooning 및 호스트 디스크 포화를 피한다.&lt;br /&gt;
&lt;br /&gt;
VM은 VirtIO NIC를 KVM 관리 브리지에 연결하고, 스위치까지 라우팅 가능한 고정 IP를 사용한다. SNMP/sFlow에는 미러 포트나 promiscuous 설정이 필요 없다. 같은 VLAN이 필수도 아니다. NAT는 SNMP 접근제어와 sFlow 송신자 식별을 복잡하게 하므로 가능한 관리망 브리지/라우팅 연결을 사용한다.&lt;br /&gt;
&lt;br /&gt;
=== 관측 범위 한계 ===&lt;br /&gt;
&lt;br /&gt;
* 전화기 연결 물리 포트의 카운터는 전화기와 PC 합산이다. IF-MIB만으로 Voice/Data를 분리할 수 없다.&lt;br /&gt;
* 같은 L2 내부에서 끝나는 트래픽은 L3만 관측해서는 보이지 않을 수 있다.&lt;br /&gt;
* 수집 경로가 폭주 구간과 겹치면 장애 때 데이터도 빠진다. OOB가 없으면 코어에 가까운 안정적 관리 경로를 확보한다.&lt;br /&gt;
* 1초 SNMP는 1초 구간 평균이며 장비 내부 카운터 갱신이 1초보다 느릴 수 있다. Microburst 부재를 증명하지 못한다.&lt;br /&gt;
&lt;br /&gt;
== 2. 변경 영향·백업 ==&lt;br /&gt;
&lt;br /&gt;
전제는 &#039;&#039;&#039;신규 전용 VM&#039;&#039;&#039;이다. 기존 운영 서버에 적용한다면 같은 이름의 설정을 덮어쓰지 말고 병합한다. 기존 Telegraf 입력/출력, rsyslog 입력 포트, Grafana, InfluxDB 데이터가 있으면 본 초기화 절차를 중단한다.&lt;br /&gt;
&lt;br /&gt;
위험 및 롤백 원칙:&lt;br /&gt;
&lt;br /&gt;
* 패키지 설치 자체로 전화 경로를 변경하지 않는다. 다만 고주기 SNMP/sFlow는 스위치 관리 CPU와 저장량을 증가시킬 수 있다.&lt;br /&gt;
* rsyslog 재시작 동안 로그 수신에 짧은 공백이 발생할 수 있다.&lt;br /&gt;
* 보존기간 만료/로그 회전은 오래된 데이터를 자동 제거한다. 장애 증거는 만료 전에 별도 보관한다.&lt;br /&gt;
* 방화벽은 기존 zone/SSH를 유지하고 특정 송신자 규칙만 추가한다. 실패하면 추가한 규칙만 제거한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;firewall-cmd --complete-reload&amp;lt;/code&amp;gt;는 설정 백업 복원이 아니다. 사용하지 않는다.&lt;br /&gt;
* VM 스냅샷은 단기 변경 복구용이며 별도 백업을 대체하지 않는다. 복원하면 스냅샷 이후 수집 데이터가 사라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
root 셸에서 실행한다. 아래 백업 변수는 이 작업용이며 동일 셸에서 유지한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
umask 077&lt;br /&gt;
MON_BACKUP=&amp;quot;/root/ipt-monitor-backup-$(date +%Y%m%d-%H%M%S)&amp;quot;&lt;br /&gt;
install -d -m 700 &amp;quot;$MON_BACKUP&amp;quot;&lt;br /&gt;
cp -a /etc/rsyslog.conf &amp;quot;$MON_BACKUP/&amp;quot;&lt;br /&gt;
cp -a /etc/rsyslog.d &amp;quot;$MON_BACKUP/&amp;quot;&lt;br /&gt;
cp -a /etc/chrony.conf &amp;quot;$MON_BACKUP/&amp;quot;&lt;br /&gt;
cp -a /etc/firewalld &amp;quot;$MON_BACKUP/&amp;quot;&lt;br /&gt;
firewall-cmd --list-all-zones &amp;gt; &amp;quot;$MON_BACKUP/firewall-runtime.txt&amp;quot;&lt;br /&gt;
firewall-cmd --permanent --list-all-zones &amp;gt; &amp;quot;$MON_BACKUP/firewall-permanent.txt&amp;quot;&lt;br /&gt;
rpm -qa | sort &amp;gt; &amp;quot;$MON_BACKUP/packages-before.txt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
firewalld가 미설치/미실행이면 해당 명령 실패를 무시한 채 진행하지 말고, 현재 호스트 방화벽 구성과 SSH 허용부터 확인한다. KVM 콘솔을 확보한다. 스위치 설정도 GUI의 configuration backup으로 별도 내려받는다.&lt;br /&gt;
&lt;br /&gt;
== 3. 기본 패키지·시간 동기화 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
cat /etc/rocky-release&lt;br /&gt;
uname -m&lt;br /&gt;
ip -br address&lt;br /&gt;
ip route&lt;br /&gt;
df -hT&lt;br /&gt;
free -h&lt;br /&gt;
getenforce&lt;br /&gt;
ss -lntup&lt;br /&gt;
&lt;br /&gt;
dnf install -y curl ca-certificates gnupg2 vim-enhanced \&lt;br /&gt;
    net-snmp-utils rsyslog logrotate chrony tcpdump iputils \&lt;br /&gt;
    sysstat policycoreutils-python-utils dnf-plugins-core&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
네트워크·SELinux는 일괄 비활성화하지 않는다. 신규 OS 업데이트/재부팅은 수집 시작 전 점검 시간에 수행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/chrony.conf&amp;lt;/code&amp;gt;의 기존 시간 서버 정책을 확인하고, 승인된 서버로 맞춘다. 다음 한 줄은 설정 파일 예시이며 셸 명령이 아니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
server &amp;lt;NTP_SERVER&amp;gt; iburst&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
timedatectl set-timezone Asia/Seoul&lt;br /&gt;
systemctl enable --now chronyd&lt;br /&gt;
systemctl restart chronyd&lt;br /&gt;
chronyc tracking&lt;br /&gt;
chronyc sources -v&lt;br /&gt;
date -Ins&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
정상 기준: 선택된 소스 &amp;lt;code&amp;gt;^*&amp;lt;/code&amp;gt;, 동기화 정상, 콜서버 및 스위치와 시간 차이가 분석 해상도보다 충분히 작음. 1초 분석은 가능하면 100ms 미만 오차를 목표로 한다. 큰 시간 보정은 수집 시작 전에 한다.&lt;br /&gt;
&lt;br /&gt;
== 4. 공식 저장소와 패키지 설치 ==&lt;br /&gt;
&lt;br /&gt;
이 가이드는 &#039;&#039;&#039;InfluxDB OSS 2.x / Flux&#039;&#039;&#039;용이다. InfluxDB 3의 SQL 설정과 혼용하지 않는다. 최신 버전이라는 의미가 아니라 본 가이드의 호환 대상이다. 저장소에서 설치 가능한 정확한 RPM 버전을 먼저 확인·기록한다.&lt;br /&gt;
&lt;br /&gt;
공식 설치 근거: [https://docs.influxdata.com/influxdb/v2/install/?t=Linux InfluxDB 2 RPM 설치], [https://docs.influxdata.com/telegraf/v1/install/ Telegraf RPM 설치], [https://grafana.com/docs/grafana/latest/setup-grafana/installation/redhat-rhel-fedora/ Grafana OSS RPM 설치]. 지속 갱신 문서, 확인일 2026-09-10.&lt;br /&gt;
&lt;br /&gt;
=== 4.1 InfluxData 저장소 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
curl -fL https://repos.influxdata.com/influxdata-archive.key \&lt;br /&gt;
    -o /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
gpg --show-keys --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
확인한 공식 문서의 기본키 fingerprint: &amp;lt;code&amp;gt;24C975CBA61A024EE1B631787C3D57159FC2F927&amp;lt;/code&amp;gt;. 일치하지 않으면 키 교체 공지를 공식 문서에서 확인하기 전에는 import하지 않는다. &amp;lt;code&amp;gt;gpgcheck=0&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;--nogpgcheck&amp;lt;/code&amp;gt;로 우회하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
vi /etc/yum.repos.d/influxdata.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
파일 내용 (&amp;lt;code&amp;gt;$basearch&amp;lt;/code&amp;gt;는 DNF가 해석하므로 그대로 둔다):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[influxdata]&lt;br /&gt;
name=InfluxData Repository - Stable&lt;br /&gt;
baseurl=https://repos.influxdata.com/stable/$basearch/main&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
sslverify=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== 4.2 Grafana 저장소 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/yum.repos.d/grafana.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[grafana]&lt;br /&gt;
name=Grafana OSS repository&lt;br /&gt;
baseurl=https://rpm.grafana.com&lt;br /&gt;
repo_gpgcheck=1&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=https://rpm.grafana.com/gpg.key&lt;br /&gt;
sslverify=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Grafana 키 import 요청 시 공식 키/문서와 대조한다. 패키지는 &amp;lt;code&amp;gt;grafana&amp;lt;/code&amp;gt;이며 &amp;lt;code&amp;gt;grafana-enterprise&amp;lt;/code&amp;gt;를 설치하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
dnf makecache&lt;br /&gt;
dnf list --showduplicates telegraf influxdb2 influxdb2-cli grafana&lt;br /&gt;
dnf install telegraf influxdb2 influxdb2-cli grafana&lt;br /&gt;
rpm -q telegraf influxdb2 influxdb2-cli grafana rsyslog&lt;br /&gt;
telegraf --version&lt;br /&gt;
influxd version&lt;br /&gt;
influx version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;influxdb2-cli&amp;lt;/code&amp;gt;가 저장소에 없다면 임의의 다른 CLI를 설치하지 말고 공식 InfluxDB 2 CLI 설치 방법으로 해당 아키텍처의 서명/체크섬 검증된 패키지를 설치한다. 서버/CLI의 버전 번호는 서로 같지 않을 수 있다.&lt;br /&gt;
&lt;br /&gt;
이후 원격 운영 전 위 버전 출력을 작업 기록에 보관한다. Telegraf/Grafana는 검증된 버전을 변경 관리 대상으로 관리하고 장애 조사 중 자동 업그레이드는 하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 5. InfluxDB 초기 설정 및 권한 분리 ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 로컬에서만 API 수신 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -d -m 755 /etc/systemd/system/influxdb.service.d&lt;br /&gt;
vi /etc/systemd/system/influxdb.service.d/10-ipt-listen.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;INFLUXD_HTTP_BIND_ADDRESS=127.0.0.1:8086&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now influxdb&lt;br /&gt;
systemctl restart influxdb&lt;br /&gt;
systemctl status influxdb --no-pager&lt;br /&gt;
ss -lntp | grep &#039;:8086&#039;&lt;br /&gt;
curl -fsS http://127.0.0.1:8086/health&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
정상: &amp;lt;code&amp;gt;127.0.0.1:8086&amp;lt;/code&amp;gt;에만 수신, health 정상. 전체 주소로 열리면 서비스/설정의 기존 바인딩 override를 확인한다. VM 방화벽에 8086을 열지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 5.2 초기화 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
influx setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
대화형 입력값:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 항목&lt;br /&gt;
! 입력&lt;br /&gt;
|-&lt;br /&gt;
| Username&lt;br /&gt;
| 전용 관리자 계정&lt;br /&gt;
|-&lt;br /&gt;
| Password&lt;br /&gt;
| 고유한 강한 암호&lt;br /&gt;
|-&lt;br /&gt;
| Organization&lt;br /&gt;
| &amp;lt;code&amp;gt;network&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bucket&lt;br /&gt;
| &amp;lt;code&amp;gt;snmp_raw&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Retention&lt;br /&gt;
| &amp;lt;code&amp;gt;720h&amp;lt;/code&amp;gt; (30일)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
이미 setup 완료로 표시되면 재초기화하지 말고 기존 조직·bucket을 확인한다. &amp;lt;code&amp;gt;influx bucket list&amp;lt;/code&amp;gt;로 &amp;lt;code&amp;gt;snmp_raw&amp;lt;/code&amp;gt; retention이 무제한이 아닌 720h인지 검증한다. 별도 테스트 환경이 아닌 기존 DB를 삭제해서 다시 시작하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
influx bucket list --org network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== 5.3 관리자 접속과 서비스 토큰 ===&lt;br /&gt;
&lt;br /&gt;
관리자 PC에서 SSH 터널을 유지한다. &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;은 PC 자신의 주소이며 SSH가 VM으로 전달한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ssh -N -L 8086:127.0.0.1:8086 -L 3000:127.0.0.1:3000 &amp;lt;SSH_USER&amp;gt;@&amp;lt;COLLECTOR_IP&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
브라우저에서 &amp;lt;code&amp;gt;http://127.0.0.1:8086&amp;lt;/code&amp;gt; 접속 → API Tokens → Custom Token:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 토큰 이름&lt;br /&gt;
! 범위&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;telegraf-write&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;snmp_raw&amp;lt;/code&amp;gt; Write만&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;grafana-read&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;snmp_raw&amp;lt;/code&amp;gt; Read만&lt;br /&gt;
|-&lt;br /&gt;
| 초기 Operator 토큰&lt;br /&gt;
| 관리자 초기화·백업용, 서비스에 배포 금지&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
발급된 토큰은 승인된 비밀 관리 위치에 보관한다. 화면/문서/채팅에 붙여넣지 않는다. 초기 CLI credential도 비밀이며 root만 읽게 유지한다. Grafana 연결에 필요한 읽기 권한과 Telegraf 쓰기 권한을 분리한다.&lt;br /&gt;
&lt;br /&gt;
== 6. SNMP 및 MIB 사전 확인 ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Zyxel 측 선행 작업 ===&lt;br /&gt;
&lt;br /&gt;
모델별 UI/CLI가 다르므로 임의 명령을 넣지 않는다. 관리 화면에서 다음 항목을 구성한다.&lt;br /&gt;
&lt;br /&gt;
* SNMP 활성화, SNMPv3 읽기 전용 사용자.&lt;br /&gt;
* 인증/암호화 알고리즘은 장비와 Rocky가 함께 지원하는 조합. 아래 예시는 SHA/AES이며 다른 알고리즘이면 양쪽을 같이 수정.&lt;br /&gt;
* 조회 허용 원본은 Rocky 관리 IP. NAT가 있다면 장비에 보이는 실제 원본 IP 확인.&lt;br /&gt;
* IF-MIB/system 조회 권한. 빈 테이블을 기능 미지원으로 단정하기 전 SNMP view 확인.&lt;br /&gt;
* 포트 description에는 전화기 내선/위치나 업링크 상대를 운영 규칙에 따라 기록하되 개인정보 최소화.&lt;br /&gt;
&lt;br /&gt;
=== 6.2 CLI credential을 명령행에 노출하지 않기 ===&lt;br /&gt;
&lt;br /&gt;
아래는 root 조회용 Net-SNMP 사용자 설정이다. 기존 파일이 있으면 백업 후 병합한다. Telegraf는 이 파일을 사용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -d -m 700 /root/.snmp&lt;br /&gt;
vi /root/.snmp/snmp.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
defVersion 3&lt;br /&gt;
defSecurityName &amp;lt;SNMP_USER&amp;gt;&lt;br /&gt;
defSecurityLevel authPriv&lt;br /&gt;
defAuthType SHA&lt;br /&gt;
defAuthPassphrase &amp;lt;SNMP_AUTH_PASSWORD&amp;gt;&lt;br /&gt;
defPrivType AES&lt;br /&gt;
defPrivPassphrase &amp;lt;SNMP_PRIV_PASSWORD&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chmod 600 /root/.snmp/snmp.conf&lt;br /&gt;
snmpget -v3 -t 2 -r 0 -On &amp;lt;SWITCH_IP&amp;gt; .1.3.6.1.2.1.1.3.0&lt;br /&gt;
snmpwalk -v3 -t 2 -r 0 -On &amp;lt;SWITCH_IP&amp;gt; .1.3.6.1.2.1.31.1.1.1.1&lt;br /&gt;
snmpwalk -v3 -t 2 -r 0 -On &amp;lt;SWITCH_IP&amp;gt; .1.3.6.1.2.1.31.1.1.1.18&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ifName&amp;lt;/code&amp;gt; OID의 마지막 숫자가 ifIndex다. 실제 포트 번호와 같다고 가정하지 않는다. 스위치 IP·포트명·ifIndex·전화기 IP·내선을 기록하고 재부팅/스택 변경 후 재확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
snmpget -v3 -t 2 -r 0 -On &amp;lt;SWITCH_IP&amp;gt; \&lt;br /&gt;
    .1.3.6.1.2.1.31.1.1.1.6.&amp;lt;IFINDEX&amp;gt; \&lt;br /&gt;
    .1.3.6.1.2.1.31.1.1.1.10.&amp;lt;IFINDEX&amp;gt; \&lt;br /&gt;
    .1.3.6.1.2.1.31.1.1.1.15.&amp;lt;IFINDEX&amp;gt; \&lt;br /&gt;
    .1.3.6.1.2.1.2.2.1.8.&amp;lt;IFINDEX&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
정상: Counter64 / Counter64 / Mbps 단위 속도 / operStatus 값. Timeout이면 경로·ACL·SNMP credential, No Such Instance면 인덱스, No Such Object면 view/지원 확인. 지원하지 않는 필드는 수집 설정에서 제외하고 미수집으로 기록한다. 0으로 대체하지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 6.3 MIB 파일 정책 ===&lt;br /&gt;
&lt;br /&gt;
기본 수집은 숫자 OID + 명시적 field name을 사용한다. IF-MIB 파일 로딩 실패와 원격 SNMP 조회 실패는 별개다. &amp;lt;code&amp;gt;net-snmp-config&amp;lt;/code&amp;gt;는 기본 utils 패키지에 없을 수 있어 필수 명령으로 사용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rpm -ql net-snmp-libs | grep &#039;/mibs/&#039;&lt;br /&gt;
snmptranslate -On IF-MIB::ifHCInOctets&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
제조사 MIB는 Zyxel 공식 지원 페이지에서 &#039;&#039;&#039;정확한 모델/펌웨어용 묶음&#039;&#039;&#039;을 받는다. CPU·PoE·큐 드롭 OID는 확인 전 추가하지 않는다. SNMPv3 쓰기 권한 또는 PoE 전원 제어는 수집기에 부여하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 7. Telegraf 구성 ==&lt;br /&gt;
&lt;br /&gt;
=== 7.1 메인 파일과 환경 파일 ===&lt;br /&gt;
&lt;br /&gt;
기존 설정 교체 시 수집 공백 발생 가능. 신규 전용 VM에서 기본 예제 설정을 백업한 후 아래 내용으로 교체한다. &amp;lt;code&amp;gt;/etc/telegraf/telegraf.d/&amp;lt;/code&amp;gt;에 기존 활성 conf가 있으면 먼저 내용을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
cp -a /etc/telegraf/telegraf.conf &amp;quot;$MON_BACKUP/telegraf.conf.package&amp;quot;&lt;br /&gt;
ls -l /etc/telegraf/telegraf.d/&lt;br /&gt;
vi /etc/telegraf/telegraf.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
  interval = &amp;quot;30s&amp;quot;&lt;br /&gt;
  round_interval = true&lt;br /&gt;
  flush_interval = &amp;quot;5s&amp;quot;&lt;br /&gt;
  precision = &amp;quot;1ms&amp;quot;&lt;br /&gt;
  metric_batch_size = 1000&lt;br /&gt;
  metric_buffer_limit = 20000&lt;br /&gt;
  omit_hostname = false&lt;br /&gt;
  snmp_translator = &amp;quot;gosmi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[outputs.influxdb_v2]]&lt;br /&gt;
  urls = [&amp;quot;http://127.0.0.1:8086&amp;quot;]&lt;br /&gt;
  token = &amp;quot;${INFLUX_WRITE_TOKEN}&amp;quot;&lt;br /&gt;
  organization = &amp;quot;network&amp;quot;&lt;br /&gt;
  bucket = &amp;quot;snmp_raw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[inputs.internal]]&lt;br /&gt;
[[inputs.cpu]]&lt;br /&gt;
  percpu = false&lt;br /&gt;
  totalcpu = true&lt;br /&gt;
[[inputs.mem]]&lt;br /&gt;
[[inputs.disk]]&lt;br /&gt;
  mount_points = [&amp;quot;/&amp;quot;]&lt;br /&gt;
[[inputs.net]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
별도 데이터 디스크를 쓰면 실제 마운트 경로를 &amp;lt;code&amp;gt;mount_points&amp;lt;/code&amp;gt;에 추가한다. &amp;lt;code&amp;gt;inputs.cpu&amp;lt;/code&amp;gt;는 Rocky VM의 CPU이며 스위치 CPU가 아니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
vi /etc/telegraf/ipt-monitor.env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
INFLUX_WRITE_TOKEN=&#039;&amp;lt;TELEGRAF_WRITE_TOKEN&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_USER=&#039;&amp;lt;SNMP_USER&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_AUTH=&#039;&amp;lt;SNMP_AUTH_PASSWORD&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_PRIV=&#039;&amp;lt;SNMP_PRIV_PASSWORD&amp;gt;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
위 파일은 systemd EnvironmentFile 형식이다. 셸에서 source로 읽지 않는다. 비밀값에 큰따옴표/역슬래시가 있으면 TOML 확장 시 구문에 영향을 줄 수 있으므로 공식 secret store를 사용하거나 이스케이프를 검증한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chown root:root /etc/telegraf/ipt-monitor.env&lt;br /&gt;
chmod 600 /etc/telegraf/ipt-monitor.env&lt;br /&gt;
install -d -m 755 /etc/systemd/system/telegraf.service.d&lt;br /&gt;
vi /etc/systemd/system/telegraf.service.d/10-ipt-monitor.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
EnvironmentFile=/etc/telegraf/ipt-monitor.env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
systemd가 환경 파일을 읽어 서비스에 전달한다. 일반 사용자의 읽기는 막지만 root나 동일 서비스 권한으로부터 완전히 숨기는 방식은 아니다.&lt;br /&gt;
&lt;br /&gt;
=== 7.2 전체 포트 30초 수집 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/telegraf/telegraf.d/10-zyxel-ports.conf&amp;lt;/code&amp;gt;를 작성한다. 한 대의 예시이며 같은 credential을 쓰는 장비는 &amp;lt;code&amp;gt;agents&amp;lt;/code&amp;gt;에 추가한다. 인증값이 다르면 입력 블록과 환경변수 이름을 분리한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table 본체에는 oid를 지정하지 않는다.&#039;&#039;&#039; 필요한 열만 아래 field로 선택해 전체 테이블의 불필요한 열 조회를 피한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[[inputs.snmp]]&lt;br /&gt;
  agents = [&amp;quot;udp://&amp;lt;SWITCH_IP&amp;gt;:161&amp;quot;]&lt;br /&gt;
  version = 3&lt;br /&gt;
  sec_name = &amp;quot;${ZYXEL_SNMP_USER}&amp;quot;&lt;br /&gt;
  sec_level = &amp;quot;authPriv&amp;quot;&lt;br /&gt;
  auth_protocol = &amp;quot;SHA&amp;quot;&lt;br /&gt;
  auth_password = &amp;quot;${ZYXEL_SNMP_AUTH}&amp;quot;&lt;br /&gt;
  priv_protocol = &amp;quot;AES&amp;quot;&lt;br /&gt;
  priv_password = &amp;quot;${ZYXEL_SNMP_PRIV}&amp;quot;&lt;br /&gt;
  timeout = &amp;quot;2s&amp;quot;&lt;br /&gt;
  retries = 0&lt;br /&gt;
  interval = &amp;quot;30s&amp;quot;&lt;br /&gt;
  agent_host_tag = &amp;quot;source&amp;quot;&lt;br /&gt;
  name = &amp;quot;switch_system&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;uptime&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.1.3.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [[inputs.snmp.table]]&lt;br /&gt;
    name = &amp;quot;switch_port&amp;quot;&lt;br /&gt;
    index_as_tag = true&lt;br /&gt;
    inherit_tags = [&amp;quot;source&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;if_name&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.1&amp;quot;&lt;br /&gt;
      is_tag = true&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;if_alias&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.18&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_octets&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.6&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_octets&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.10&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_ucast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.7&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_mcast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.8&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_bcast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.9&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_ucast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.11&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_mcast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.12&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_bcast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.13&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;speed_mbps&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.15&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;discontinuity&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.19&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;oper_status&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.8&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_discards&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.13&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_discards&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.19&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_errors&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.14&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_errors&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.20&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;if_alias&amp;lt;/code&amp;gt;는 설명 변경에 따른 series 증가를 줄이기 위해 field로 저장한다. 실제 출력에 &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;if_name&amp;lt;/code&amp;gt; 태그가 있는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 7.3 중요 포트 5초 수집 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/telegraf/telegraf.d/20-zyxel-fast.conf&amp;lt;/code&amp;gt;를 작성한다. 필요한 포트 수만큼 블록을 복제하고 IP·ifIndex·태그를 모두 바꾼다. 같은 포트의 중복 설정은 금지하며 일반 수집과 measurement를 분리한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[[inputs.snmp]]&lt;br /&gt;
  agents = [&amp;quot;udp://&amp;lt;SWITCH_IP&amp;gt;:161&amp;quot;]&lt;br /&gt;
  version = 3&lt;br /&gt;
  sec_name = &amp;quot;${ZYXEL_SNMP_USER}&amp;quot;&lt;br /&gt;
  sec_level = &amp;quot;authPriv&amp;quot;&lt;br /&gt;
  auth_protocol = &amp;quot;SHA&amp;quot;&lt;br /&gt;
  auth_password = &amp;quot;${ZYXEL_SNMP_AUTH}&amp;quot;&lt;br /&gt;
  priv_protocol = &amp;quot;AES&amp;quot;&lt;br /&gt;
  priv_password = &amp;quot;${ZYXEL_SNMP_PRIV}&amp;quot;&lt;br /&gt;
  timeout = &amp;quot;800ms&amp;quot;&lt;br /&gt;
  retries = 0&lt;br /&gt;
  interval = &amp;quot;5s&amp;quot;&lt;br /&gt;
  agent_host_tag = &amp;quot;source&amp;quot;&lt;br /&gt;
  name = &amp;quot;switch_port_fast&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [inputs.snmp.tags]&lt;br /&gt;
    if_name = &amp;quot;&amp;lt;PORT_LABEL&amp;gt;&amp;quot;&lt;br /&gt;
    index = &amp;quot;&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_octets&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.6.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_octets&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.10.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_ucast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.7.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_mcast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.8.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_bcast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.9.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_ucast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.11.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_mcast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.12.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_bcast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.13.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_discards&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.2.2.1.13.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_discards&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.2.2.1.19.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;oper_status&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.2.2.1.8.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;discontinuity&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.19.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
표준 정의: [https://www.rfc-editor.org/rfc/rfc2863.html RFC 2863]. 각 열의 지원 여부는 실장비에서 확인한다.&lt;br /&gt;
&lt;br /&gt;
1초 수집은 해당 블록의 &amp;lt;code&amp;gt;interval = &amp;amp;quot;1s&amp;amp;quot;&amp;lt;/code&amp;gt;로 변경한다. 먼저 카운터 갱신과 수집 소요시간을 확인한다. 800ms는 개별 요청 timeout이지 전체 수집 완료 보장이 아니다. 실패를 반복 재시도하지 않고 결측으로 남긴다. DB에 5초마다 묶어 써도 원래 수집 timestamp는 유지된다.&lt;br /&gt;
&lt;br /&gt;
=== 7.4 응답시간·손실 보조 수집 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/telegraf/telegraf.d/30-ipt-ping.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[[inputs.ping]]&lt;br /&gt;
  urls = [&amp;quot;&amp;lt;SWITCH_IP&amp;gt;&amp;quot;, &amp;quot;&amp;lt;CALLSERVER_IP&amp;gt;&amp;quot;]&lt;br /&gt;
  method = &amp;quot;native&amp;quot;&lt;br /&gt;
  privileged = true&lt;br /&gt;
  count = 1&lt;br /&gt;
  deadline = &amp;quot;1s&amp;quot;&lt;br /&gt;
  interval = &amp;quot;5s&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
승인된 시험 전화기 IP를 필요 시 추가한다. ICMP 비응답 장비는 제외한다. 콜서버 Ping은 SIP 서비스 감시가 아니며 VM에서의 경로도 전화기에서의 경로와 같다고 보장할 수 없다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/systemd/system/telegraf.service.d/10-ipt-monitor.conf&amp;lt;/code&amp;gt;의 같은 &amp;lt;code&amp;gt;[Service]&amp;lt;/code&amp;gt;에 추가한다:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
CapabilityBoundingSet=CAP_NET_RAW&lt;br /&gt;
AmbientCapabilities=CAP_NET_RAW&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Telegraf를 root로 실행하는 설정은 아니다. [https://docs.influxdata.com/telegraf/v1/input-plugins/ping/ 공식 Ping 권한 설명]. 기존 입력이 있으면 필요한 capability를 제거하지 않도록 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 7.5 검사·기동 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
chown root:telegraf /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.d/*-*.conf&lt;br /&gt;
chmod 640 /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.d/*-*.conf&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemd-run --unit=ipt-telegraf-check --wait --pipe --collect \&lt;br /&gt;
    -p User=telegraf -p Group=telegraf \&lt;br /&gt;
    -p EnvironmentFile=/etc/telegraf/ipt-monitor.env \&lt;br /&gt;
    -p CapabilityBoundingSet=CAP_NET_RAW \&lt;br /&gt;
    -p AmbientCapabilities=CAP_NET_RAW \&lt;br /&gt;
    /usr/bin/telegraf --config /etc/telegraf/telegraf.conf \&lt;br /&gt;
    --config-directory /etc/telegraf/telegraf.d --test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
실제로 SNMP/Ping을 한 번 수집하는 검사다. 출력의 IP 등은 사내 정보로 취급한다. &amp;lt;code&amp;gt;--test&amp;lt;/code&amp;gt;는 InfluxDB 쓰기를 검증하지 않는다. 수집 검사 성공 후:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl enable --now telegraf&lt;br /&gt;
systemctl restart telegraf&lt;br /&gt;
systemctl status telegraf --no-pager&lt;br /&gt;
journalctl -u telegraf -n 100 --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
설정 근거: [https://docs.influxdata.com/telegraf/v1/input-plugins/snmp/ SNMP Input Plugin], [https://docs.influxdata.com/telegraf/v1/configuration/ Telegraf 설정]. 입력과 DB 출력이 모두 성공하는지 확인하고 unauthorized, timeout, collection interval 초과, buffer/drop 메시지를 조사한다.&lt;br /&gt;
&lt;br /&gt;
== 8. Grafana 구성과 계산 ==&lt;br /&gt;
&lt;br /&gt;
=== 8.1 서비스 ===&lt;br /&gt;
&lt;br /&gt;
먼저 백업한 뒤 &amp;lt;code&amp;gt;/etc/grafana/grafana.ini&amp;lt;/code&amp;gt;의 기존 섹션을 수정한다. 중복 섹션을 추가하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
cp -a /etc/grafana/grafana.ini &amp;quot;$MON_BACKUP/grafana.ini.initial&amp;quot;&lt;br /&gt;
vi /etc/grafana/grafana.ini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
http_addr = 127.0.0.1&lt;br /&gt;
http_port = 3000&lt;br /&gt;
&lt;br /&gt;
[users]&lt;br /&gt;
allow_sign_up = false&lt;br /&gt;
&lt;br /&gt;
[auth.anonymous]&lt;br /&gt;
enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl enable --now grafana-server&lt;br /&gt;
systemctl restart grafana-server&lt;br /&gt;
systemctl status grafana-server --no-pager&lt;br /&gt;
curl -fsS http://127.0.0.1:3000/api/health&lt;br /&gt;
ss -lntp | grep &#039;:3000&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
초기 관리자로 로그인 후 즉시 강한 비밀번호로 변경한다. SSH 터널의 &amp;lt;code&amp;gt;http://127.0.0.1:3000&amp;lt;/code&amp;gt;을 사용한다. 공유 접속이 필요하면 인증·TLS reverse proxy와 접근제어를 별도 구성하며 평문 HTTP를 전사망에 개방하지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 8.2 InfluxDB 데이터소스 ===&lt;br /&gt;
&lt;br /&gt;
Connections → Data sources → Add data source → InfluxDB:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 설정&lt;br /&gt;
! 값&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| &amp;lt;code&amp;gt;IPT-SNMP&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Query language&lt;br /&gt;
| Flux&lt;br /&gt;
|-&lt;br /&gt;
| URL&lt;br /&gt;
| &amp;lt;code&amp;gt;http://127.0.0.1:8086&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Organization&lt;br /&gt;
| &amp;lt;code&amp;gt;network&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Token&lt;br /&gt;
| grafana-read 토큰&lt;br /&gt;
|-&lt;br /&gt;
| Default Bucket&lt;br /&gt;
| &amp;lt;code&amp;gt;snmp_raw&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Min time interval&lt;br /&gt;
| &amp;lt;code&amp;gt;1s&amp;lt;/code&amp;gt; (실제 수집 간격은 패널별로 반영)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save &amp;amp;amp; test 성공 후 Explore에서 measurement를 조회한다. [https://grafana.com/docs/grafana/latest/datasources/influxdb/configure/ Grafana 공식 연결 설정].&lt;br /&gt;
&lt;br /&gt;
=== 8.3 필드와 태그 확인 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: -10m)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &amp;quot;switch_port_fast&amp;quot;)&lt;br /&gt;
  |&amp;gt; limit(n: 5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
실제 &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt; 태그를 확인해 아래 &amp;lt;code&amp;gt;&amp;amp;lt;SOURCE_TAG_VALUE&amp;amp;gt;&amp;lt;/code&amp;gt;에 넣는다. 일반적으로 장비 IP지만 출력으로 확인한다. 먼저 변수 없이 한 대·한 포트의 표시를 완성한다.&lt;br /&gt;
&lt;br /&gt;
=== 8.4 In/Out bps ===&lt;br /&gt;
&lt;br /&gt;
패널: Time series / Unit: bits/sec / 결측 구간 연결 안 함 / 시간대 Asia/Seoul / 범위 최근 15분 / refresh 5s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: v.timeRangeStart, stop: v.timeRangeStop)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &amp;quot;switch_port_fast&amp;quot;)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r.source == &amp;quot;&amp;lt;SOURCE_TAG_VALUE&amp;gt;&amp;quot; and r.index == &amp;quot;&amp;lt;IFINDEX&amp;gt;&amp;quot;)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == &amp;quot;in_octets&amp;quot; or r._field == &amp;quot;out_octets&amp;quot;)&lt;br /&gt;
  |&amp;gt; derivative(unit: 1s, nonNegative: true)&lt;br /&gt;
  |&amp;gt; map(fn: (r) =&amp;gt; ({r with _value: r._value * 8.0}))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;derivative&amp;lt;/code&amp;gt;로 실제 timestamp 차이를 사용해 초당 값으로 바꾼 뒤 8배한다. 고정 간격 5로 나누지 않는다. 장기간 표시에서 집계한다면 &#039;&#039;&#039;rate 계산 후&#039;&#039;&#039; &amp;lt;code&amp;gt;aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)&amp;lt;/code&amp;gt;를 추가하고 ‘구간 내 최대 수집간격 평균’으로 표시한다. 누적 카운터를 먼저 평균내지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nonNegative&amp;lt;/code&amp;gt;만으로 모든 리셋을 판별할 수 없다. discontinuity 변경·sysUpTime 감소·링크 변경 구간은 무효 처리한다. 첫 점은 이전 값이 없어 표시되지 않는다. 결측은 0으로 채우지 않으며 긴 결측을 가로지르는 rate는 장애 증거에 사용하지 않는다. [https://docs.influxdata.com/flux/v0/stdlib/universe/derivative/ Flux derivative].&lt;br /&gt;
&lt;br /&gt;
=== 8.5 PPS、Broadcast、Discard ===&lt;br /&gt;
&lt;br /&gt;
위 쿼리의 &amp;lt;code&amp;gt;_field&amp;lt;/code&amp;gt; 조건을 다음으로 바꾸고 8배하는 &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; 행은 제거한다. 각 계열을 별도로 표시한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == &amp;quot;in_ucast&amp;quot; or r._field == &amp;quot;in_mcast&amp;quot; or r._field == &amp;quot;in_bcast&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
합계 In PPS는 세 계열의 합이다. Out PPS는 대응하는 &amp;lt;code&amp;gt;out_&amp;lt;/code&amp;gt; 세 계열로 만든다. Broadcast/Multicast 전용 패널도 구성해 정상 시 기준과 비교한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == &amp;quot;in_discards&amp;quot; or r._field == &amp;quot;out_discards&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
위 값은 폐기 packets/sec다. 누적값이 아니라 증가율을 표시한다. 일반 수집 measurement의 &amp;lt;code&amp;gt;in_errors/out_errors&amp;lt;/code&amp;gt;도 같은 방식으로 별도 패널을 만든다.&lt;br /&gt;
&lt;br /&gt;
=== 8.6 상태·손실·대시보드 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;oper_status&amp;lt;/code&amp;gt;는 rate로 바꾸지 않는다. 1=up, 2=down 등으로 state timeline에 표시한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;speed_mbps&amp;lt;/code&amp;gt;는 Mbps 단위다. In 사용률=In bps÷(speed_mbps×1,000,000)×100. Out은 따로 계산하며 전이중의 In/Out을 합쳐 100%로 판정하지 않는다.&lt;br /&gt;
* &amp;lt;code&amp;gt;ping&amp;lt;/code&amp;gt;의 &amp;lt;code&amp;gt;average_response_ms&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;percent_packet_loss&amp;lt;/code&amp;gt;는 이미 계산된 값이므로 derivative 불필요. 1패킷/5초 설정에서는 각 관측의 손실이 0% 또는 100%다.&lt;br /&gt;
* LAG 논리 포트와 물리 멤버를 별도로 표시하고 합산 중복 집계를 피한다.&lt;br /&gt;
* 초기 패널: 중요 포트 bps, Broadcast/Multicast PPS, Discard/Error 증가율, operStatus, Ping 지연·손실, VM CPU·메모리·디스크, Telegraf 오류·결측.&lt;br /&gt;
* 스위치 CPU·PoE는 모델별 OID 확인 후 추가한다. 미설정을 0/정상으로 표시하지 않는다.&lt;br /&gt;
&lt;br /&gt;
대시보드를 저장하고 JSON으로 내보낸다. 이번 Syslog 구성은 파일 조회용으로 Grafana에서 로그를 검색할 수는 없다. 별도 로그 검색 UI를 추가하기 전에는 §11의 CLI로 대조한다.&lt;br /&gt;
&lt;br /&gt;
== 9. Zyxel Syslog 수신 ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1 포트 중복 확인 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
grep -RniE &#039;imudp|imtcp|port=&amp;quot;514&amp;quot;|UDPServerRun&#039; /etc/rsyslog.conf /etc/rsyslog.d&lt;br /&gt;
ss -lunp | grep &#039;:514&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
기존 입력이 있으면 module/input을 중복 생성하지 말고 기존 설정에 통합한다. 아래는 미구성 신규 VM용이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
install -d -m 750 /var/log/zyxel&lt;br /&gt;
restorecon -RF /var/log/zyxel&lt;br /&gt;
vi /etc/rsyslog.d/30-zyxel-remote.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
module(load=&amp;quot;imudp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
template(name=&amp;quot;ZyxelRemotePath&amp;quot; type=&amp;quot;string&amp;quot;&lt;br /&gt;
  string=&amp;quot;/var/log/zyxel/%fromhost-ip:::secpath-replace%/events.log&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
template(name=&amp;quot;ZyxelRemoteLine&amp;quot; type=&amp;quot;string&amp;quot;&lt;br /&gt;
  string=&amp;quot;received=%timegenerated:::date-rfc3339% reported=%timereported:::date-rfc3339% src=%fromhost-ip% host=%hostname% facility=%syslogfacility-text% severity=%syslogseverity-text% tag=%syslogtag% msg=%msg%\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ruleset(name=&amp;quot;ZyxelRemoteRules&amp;quot;) {&lt;br /&gt;
  action(type=&amp;quot;omfile&amp;quot;&lt;br /&gt;
    dynaFile=&amp;quot;ZyxelRemotePath&amp;quot;&lt;br /&gt;
    template=&amp;quot;ZyxelRemoteLine&amp;quot;&lt;br /&gt;
    createDirs=&amp;quot;on&amp;quot;&lt;br /&gt;
    dirCreateMode=&amp;quot;0750&amp;quot;&lt;br /&gt;
    fileCreateMode=&amp;quot;0640&amp;quot;)&lt;br /&gt;
  stop&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
input(type=&amp;quot;imudp&amp;quot; address=&amp;quot;&amp;lt;COLLECTOR_IP&amp;gt;&amp;quot; port=&amp;quot;514&amp;quot;&lt;br /&gt;
  ruleset=&amp;quot;ZyxelRemoteRules&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
송신 IP별 파일에 수신 시각과 장비 보고 시각을 함께 기록한다. 장비 Syslog에 시간대 정보가 없으면 완전한 보정은 불가능하므로 실장비 테스트로 대조한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rsyslogd -N1&lt;br /&gt;
systemctl enable --now rsyslog&lt;br /&gt;
systemctl restart rsyslog&lt;br /&gt;
ss -lunp | grep &#039;:514&#039;&lt;br /&gt;
journalctl -u rsyslog -n 100 --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
재시작 중 짧은 수신 공백에 주의한다. 실패하면 변경 전 파일을 복원하고 &amp;lt;code&amp;gt;rsyslogd -N1&amp;lt;/code&amp;gt; 검사 후 재시작한다. SELinux 거부는 다음으로 확인하며 비활성화하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent&lt;br /&gt;
ls -Zd /var/log/zyxel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
근거: [https://docs.rsyslog.com/doc/configuration/modules/imudp.html imudp], [https://docs.rsyslog.com/doc/configuration/modules/omfile.html omfile]. 참조 문서는 최신판을 포함하므로 설치된 rsyslog의 구문 검사를 반드시 수행한다.&lt;br /&gt;
&lt;br /&gt;
=== 9.2 로그 회전과 보존 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/logrotate.d/zyxel-remote&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/var/log/zyxel/*/events.log {&lt;br /&gt;
    daily&lt;br /&gt;
    rotate 30&lt;br /&gt;
    missingok&lt;br /&gt;
    notifempty&lt;br /&gt;
    compress&lt;br /&gt;
    delaycompress&lt;br /&gt;
    create 0640 root root&lt;br /&gt;
    sharedscripts&lt;br /&gt;
    postrotate&lt;br /&gt;
        /usr/bin/systemctl kill -s HUP --kill-who=main rsyslog.service &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
    endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
보존은 ‘30회전분’이며 매일 회전하면 약 30일이다. 정확히 30일이 지난 순간 삭제되는 방식은 아니다. 오래된 파일 삭제를 수반하므로 장애 로그는 별도 보관한다. 신규 VM의 rsyslog root 실행 기준이며 privilege drop을 사용한다면 소유자를 맞춘다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
logrotate -d /etc/logrotate.d/zyxel-remote&lt;br /&gt;
systemctl status logrotate.timer --no-pager&lt;br /&gt;
systemctl list-timers --all | grep logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
일일 실행이 비활성이라면 패키지 timer/cron을 확인해 활성화한다. 일일 회전만으로 하루 동안의 폭증에 따른 디스크 고갈은 막을 수 없다. 디스크 80% 예고 감시와 증가량 점검을 수행한다. 근거 없이 중요 로그를 제한해 버리지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 9.3 Zyxel 측 송신 ===&lt;br /&gt;
&lt;br /&gt;
Syslog 목적지 &amp;lt;code&amp;gt;&amp;amp;lt;COLLECTOR_IP&amp;amp;gt;&amp;lt;/code&amp;gt; / UDP514. Informational을 포함하는 범위로 시작하고 상시 Debug는 피한다. Link Up/Down, STP 변경, 루프 탐지, PoE 이상·전력 부족, 재시작 등을 모델 지원 범위에서 활성화한다. 포트별 이벤트 설정이 필요하면 함께 적용한다.&lt;br /&gt;
&lt;br /&gt;
== 10. firewalld와 접속 확인 ==&lt;br /&gt;
&lt;br /&gt;
기본 웹 접속은 SSH 터널만 사용한다. 3000/8086과 서버 수신 UDP161/162를 열지 않는다. SNMP는 서버에서 스위치 UDP161로 조회하고 응답을 받는다. 외향 제한이 있는 경우에만 기존 정책에 필요 허용을 추가한다.&lt;br /&gt;
&lt;br /&gt;
=== 10.1 Syslog만 허용 ===&lt;br /&gt;
&lt;br /&gt;
영향: 지정 송신원에서 UDP514 수신을 추가한다. zone 변경·SSH 규칙 삭제·광범위 허용은 하지 않는다. 먼저 확인:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
firewall-cmd --get-active-zones&lt;br /&gt;
firewall-cmd --zone=&amp;lt;FW_ZONE&amp;gt; --list-all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
실제 값으로 설정한다. 송신자를 엄격히 제한하려면 장비별 /32 규칙을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
MON_ZONE=&#039;&amp;lt;FW_ZONE&amp;gt;&#039;&lt;br /&gt;
MON_SYSLOG_RULE=&#039;rule family=&amp;quot;ipv4&amp;quot; source address=&amp;quot;&amp;lt;SWITCH_SOURCE_CIDR&amp;gt;&amp;quot; port port=&amp;quot;514&amp;quot; protocol=&amp;quot;udp&amp;quot; accept&#039;&lt;br /&gt;
firewall-cmd --zone=&amp;quot;$MON_ZONE&amp;quot; --add-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot; --timeout=600&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
10분 안에 장비 송신과 SSH 접속 유지를 확인한다. 임시 규칙은 자동 만료된다. 승인 후 동일 규칙만 영구 및 runtime에 적용:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --zone=&amp;quot;$MON_ZONE&amp;quot; --add-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
firewall-cmd --zone=&amp;quot;$MON_ZONE&amp;quot; --remove-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
firewall-cmd --zone=&amp;quot;$MON_ZONE&amp;quot; --add-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
이미 만료됐다면 remove의 not enabled를 확인하고 다음으로 진행한다. 전체 runtime 저장이나 reload로 다른 작업 변경을 포함하지 않는다.&lt;br /&gt;
&lt;br /&gt;
롤백 — 이번 작업에서 새로 추가한 규칙만 제거:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
firewall-cmd --zone=&amp;quot;$MON_ZONE&amp;quot; --remove-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
firewall-cmd --permanent --zone=&amp;quot;$MON_ZONE&amp;quot; --remove-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== 10.2 실장비 도달 확인 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
timeout 20 tcpdump -ni any -nn &#039;udp dst port 514&#039;&lt;br /&gt;
tail -n 50 /var/log/zyxel/&amp;lt;SWITCH_SYSLOG_SOURCE_IP&amp;gt;/events.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
VM 자신의 logger는 파일 저장 검사용이며 스위치에서의 경로·ACL 검증을 대신하지 못한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
logger --udp --server &amp;lt;COLLECTOR_IP&amp;gt; --port 514 --tag IPT_TEST &#039;collector receiver test&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 11. 시험 운영·장애 확인 ==&lt;br /&gt;
&lt;br /&gt;
=== 11.1 초기 24시간 ===&lt;br /&gt;
&lt;br /&gt;
# 한 대·중요 포트 1~2개로 시작한다.&lt;br /&gt;
# 실제 SNMP 카운터와 InfluxDB 값 증가를 대조한다.&lt;br /&gt;
# bps/PPS 변동과 operStatus 표시를 확인한다.&lt;br /&gt;
# 정상 발신 테스트의 시각·단말 IP·Call-ID를 기록한다. 본망에서 부하용 iperf나 루프를 만들지 않는다.&lt;br /&gt;
# 별도 수집 중인 콜서버 SIP와 전후 2분의 네트워크 기록을 비교한다.&lt;br /&gt;
# 5060 외 SIP/TLS와 RTP는 해당 캡처 범위 밖임을 기록한다.&lt;br /&gt;
# 수집시간·스위치 CPU·VM CPU/IO·결측·로그 증가량이 허용 범위면 대상 장비를 늘린다.&lt;br /&gt;
# 중요 포트 1초화는 카운터 갱신을 실측한 후 진행한다.&lt;br /&gt;
&lt;br /&gt;
=== 11.2 운영 확인 명령 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl is-active influxdb telegraf grafana-server rsyslog chronyd&lt;br /&gt;
journalctl -u telegraf --since &#039;-10 min&#039; --no-pager&lt;br /&gt;
chronyc tracking&lt;br /&gt;
df -h&lt;br /&gt;
du -sh /var/log/zyxel&lt;br /&gt;
vmstat 1 5&lt;br /&gt;
iostat -xz 1 5&lt;br /&gt;
nstat -az | grep -E &#039;Udp(InErrors|RcvbufErrors|InDatagrams)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
UDP 통계는 누적값이므로 시간 차분으로 본다. VM/호스트의 수신 드롭을 스위치 송신 중단으로 오해하지 않는다. &amp;lt;code&amp;gt;inputs.internal&amp;lt;/code&amp;gt;의 수집시간·오류와 DB 출력 drop도 대시보드에 추가한다.&lt;br /&gt;
&lt;br /&gt;
=== 11.3 장애 기록 양식 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 항목&lt;br /&gt;
! 기록&lt;br /&gt;
|-&lt;br /&gt;
| 장애 일시·시간대&lt;br /&gt;
| 초 단위, KST&lt;br /&gt;
|-&lt;br /&gt;
| 발신·착신&lt;br /&gt;
| 내선, 전화기 IP, 등록 상태&lt;br /&gt;
|-&lt;br /&gt;
| 연결 위치&lt;br /&gt;
| L2 이름, 포트, ifIndex, Voice VLAN&lt;br /&gt;
|-&lt;br /&gt;
| PC 상태&lt;br /&gt;
| 동시 정상·불통·미확인&lt;br /&gt;
|-&lt;br /&gt;
| SIP&lt;br /&gt;
| INVITE 도착, 응답 코드, Call-ID, 재전송&lt;br /&gt;
|-&lt;br /&gt;
| SNMP&lt;br /&gt;
| In/Out bps、PPS、Broadcast、Discard、operStatus&lt;br /&gt;
|-&lt;br /&gt;
| 로그&lt;br /&gt;
| Link, STP, PoE, 재부팅 등&lt;br /&gt;
|-&lt;br /&gt;
| 수집 상태&lt;br /&gt;
| NTP, 결측, VM 수신 drop, tcpdump drop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
로그 검색:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
grep -Ei &#039;link|stp|loop|poe|power|reboot|restart|topology&#039; \&lt;br /&gt;
    /var/log/zyxel/&amp;lt;SWITCH_SYSLOG_SOURCE_IP&amp;gt;/events.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
메시지의 수신·보고 시각을 장애 전후와 비교한다. 키워드가 없다는 이유만으로 이벤트가 없다고 판단하지 않는다. 장비 문구는 모델에 따라 다르다.&lt;br /&gt;
&lt;br /&gt;
=== 11.4 초기 알림 제안 ===&lt;br /&gt;
&lt;br /&gt;
아래는 운영 후 Grafana 관리형 알림으로 구성할 제안값이며 자동 생성된 설정은 아니다.&lt;br /&gt;
&lt;br /&gt;
* 중요 포트 한 방향 사용률 80% 이상이 30초 지속: 혼잡 예고이며 원인 확정은 아니다.&lt;br /&gt;
* 중요 포트 Discard 증가: 조사 이벤트. QoS·버퍼·정책 확인.&lt;br /&gt;
* Ping 3회 연속 손실: VM에서의 도달성 이상이며 SIP 장애 확정은 아니다.&lt;br /&gt;
* 고주기 데이터 15초 이상 결측: No Data를 정상으로 처리하지 않는다.&lt;br /&gt;
* 디스크 사용량 80% 이상: 보존 공간 경고.&lt;br /&gt;
* Broadcast PPS는 24시간 정상값을 확보한 뒤 임계값을 결정한다. 모든 현장에 공통 고정값을 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
전화 연결 실패와 높은 사용률·Discard 증가가 동반되면 혼잡이 유력하다. INVITE 불착만으로 단말 미송신과 경로 손실은 구분할 수 없다. 등록·PoE·Voice VLAN 상태와 함께 판단한다.&lt;br /&gt;
&lt;br /&gt;
== 12. sFlow 추가 — 조건부 절차 ==&lt;br /&gt;
&lt;br /&gt;
=== 12.1 착수 조건 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zyxel이라는 제조사명만으로 sFlow 지원을 확정할 수 없다.&#039;&#039;&#039; 정확한 모델·펌웨어의 공식 매뉴얼에서 exporter, 대상 인터페이스, sampling 범위, source/agent IP 설정을 확인한다. 확인 전 컨테이너 전체를 기동할 필요는 없다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 장비 설정&lt;br /&gt;
! 계획&lt;br /&gt;
|-&lt;br /&gt;
| Collector&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;COLLECTOR_IP&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| UDP port&lt;br /&gt;
| 6343, 수집기와 일치&lt;br /&gt;
|-&lt;br /&gt;
| Agent / source&lt;br /&gt;
| SNMP로 도달 가능한 고정 관리 IP&lt;br /&gt;
|-&lt;br /&gt;
| Sampling&lt;br /&gt;
| 지원 범위에서 1:1024 전후를 시험 시작값으로 검토&lt;br /&gt;
|-&lt;br /&gt;
| Counter polling&lt;br /&gt;
| 10~30초 중 장비 지원값&lt;br /&gt;
|-&lt;br /&gt;
| 관측 대상&lt;br /&gt;
| 중요 L2/L3 포트, 가능하면 ingress 중심&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
패킷 샘플링과 counter polling은 별개다. sFlow는 SIP 전체 패킷 캡처를 대체하지 않는다. IP별 사용률은 추정이고 L3만으로 같은 L2 내부 트래픽을 놓칠 수 있다. 여러 스위치·입출력의 동일 패킷을 중복 합산하지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 12.2 Akvorado 도입 방안 ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/akvorado/akvorado Akvorado 공식 프로젝트]는 NetFlow/IPFIX/sFlow, SNMP 메타데이터 보강, ClickHouse 저장과 웹 분석을 제공한다. 공식 Docker Compose는 본문의 RPM 운영과 별개다. &#039;&#039;&#039;이전 설명의 Podman Compose 호환을 전제하지 않는다.&#039;&#039;&#039; Docker와 Podman 호환 패키지도 혼용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
공식 &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;는 여러 &amp;lt;code&amp;gt;docker/docker-compose-*.yml&amp;lt;/code&amp;gt;을 조합한다. main은 개발 구성을 포함하므로 그대로 운영 배포하지 않는다. [https://github.com/akvorado/akvorado/tree/main/docker 공식 구성 디렉터리].&lt;br /&gt;
&lt;br /&gt;
지원 확인 후 KVM 스냅샷과 방화벽 백업을 확보하고 Docker Engine의 RHEL/CentOS계 설치 방법을 검토한다. Rocky가 Docker의 공식 지원 대상과 동일하다고 가정하지 않는다. [https://docs.docker.com/engine/install/centos/ Docker CentOS 절차].&lt;br /&gt;
&lt;br /&gt;
신규 전용 VM이며 패키지 충돌이 없다고 확인된 경우의 준비 명령:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
rpm -q podman-docker docker-ce docker-ce-cli containerd.io&lt;br /&gt;
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
dnf list --showduplicates docker-ce docker-compose-plugin&lt;br /&gt;
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
충돌 패키지를 자동 삭제하지 않는다. Docker는 전송·패킷 필터 규칙을 변경할 수 있으므로 KVM 게스트에서만 적용하고 관리 경로를 검증한다. KVM 호스트에서는 실행하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl enable --now docker&lt;br /&gt;
docker version&lt;br /&gt;
docker compose version&lt;br /&gt;
dnf install -y git&lt;br /&gt;
git clone https://github.com/akvorado/akvorado.git /opt/akvorado&lt;br /&gt;
cd /opt/akvorado&lt;br /&gt;
git tag --sort=-version:refname | head -20&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
기존 파일이 있는 &amp;lt;code&amp;gt;/opt/akvorado&amp;lt;/code&amp;gt;에는 clone하지 않는다. 공식 안정 릴리스의 태그를 선택하고 해당 Changelog·문서를 읽는다. 본문에서 태그는 미확정이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
git switch --detach &amp;lt;VERIFIED_STABLE_TAG&amp;gt;&lt;br /&gt;
git rev-parse HEAD&lt;br /&gt;
docker compose config --services&lt;br /&gt;
docker compose config --images&lt;br /&gt;
docker compose config --quiet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;docker compose config --quiet&amp;lt;/code&amp;gt;는 Compose 구문만 검사한다. 앱 설정 검증과 다르다. 아래 환경값을 &#039;&#039;&#039;선택한 릴리스의 schema로 구성한 후&#039;&#039;&#039; 기동한다. 추정한 키 이름으로 작성한 YAML은 제공하지 않는다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 필수 설정&lt;br /&gt;
! 확인 사항&lt;br /&gt;
|-&lt;br /&gt;
| sFlow 입력&lt;br /&gt;
| UDP6343 수신·바인딩&lt;br /&gt;
|-&lt;br /&gt;
| SNMP metadata&lt;br /&gt;
| agent/source 주소, 장비별 인증값, 포트명 보강&lt;br /&gt;
|-&lt;br /&gt;
| 내부 네트워크&lt;br /&gt;
| Voice/Data CIDR과 사설 IP 분류&lt;br /&gt;
|-&lt;br /&gt;
| 불필요 서비스&lt;br /&gt;
| demo exporter 비활성, Grafana 중복 배치 금지, GeoIP 의존성 확인&lt;br /&gt;
|-&lt;br /&gt;
| 인증·공개&lt;br /&gt;
| 웹은 loopback+SSH 또는 인증 TLS, DB/Kafka는 외부 공개 금지&lt;br /&gt;
|-&lt;br /&gt;
| 보존&lt;br /&gt;
| 원시·집계 데이터 기간, ClickHouse TTL, 용량 계획&lt;br /&gt;
|-&lt;br /&gt;
| 영속화·SELinux&lt;br /&gt;
| named volume 또는 전용 bind mount 라벨, 공유 OS 경로에 &amp;lt;code&amp;gt;:Z&amp;lt;/code&amp;gt; 사용 금지&lt;br /&gt;
|-&lt;br /&gt;
| 재시작&lt;br /&gt;
| 서비스 restart policy, Docker 자동 기동&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Docker 공개 포트를 firewalld INPUT 규칙만으로 제한할 수 있다고 가정하지 않는다.&#039;&#039;&#039; 실제 백엔드의 전달 규칙/DOCKER-USER 상당 경로, 상위 ACL과 관리 IP 바인딩을 확인하고 비허가 단말에서 차단되는지 시험한다. 관리 IP 바인딩은 송신원 제한이 아니다. §10 rich rule만으로 Docker의 UDP6343 제한을 완료 처리하지 않는다.&lt;br /&gt;
&lt;br /&gt;
위 조건을 확정한 뒤 실행할 기동·검증 명령:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
cd /opt/akvorado&lt;br /&gt;
docker compose pull&lt;br /&gt;
docker compose up -d&lt;br /&gt;
docker compose ps&lt;br /&gt;
docker compose logs --tail=100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
태그·설정이 미정인 상태에서 일괄 실행하는 명령이 아니다. 같은 릴리스의 앱 설정 검사 방법을 따르고 healthy 표시뿐 아니라 실제 데이터 표시도 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 12.3 수신·분석 합격 기준 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
timeout 20 tcpdump -ni any -nn &#039;udp dst port 6343&#039;&lt;br /&gt;
ss -lunp | grep &#039;:6343&#039;&lt;br /&gt;
nstat -az | grep -E &#039;Udp(InErrors|RcvbufErrors|InDatagrams)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Docker의 포트 구현에 따라 호스트 &amp;lt;code&amp;gt;ss&amp;lt;/code&amp;gt;에 예상 소켓이 안 보일 수 있다. 실제 Compose 포트 매핑과 수신 메트릭을 함께 확인한다.&lt;br /&gt;
&lt;br /&gt;
합격: 스위치 source에서 패킷 도착, 수집·디코드 카운터 증가, 오류 급증 없음, 웹에서 exporter·입력 포트·단말 IP·시간대 표시, 포트 번호의 실제 이름 매핑. tcpdump 도착만으로 성공 판정하지 않는다.&lt;br /&gt;
&lt;br /&gt;
미지원 장비는 SNMP/Syslog를 유지하고 필요한 사건만 승인된 포트 미러링으로 분석한다. 미러링은 별도 vNIC·물리 연결·대역폭 검토가 필요하며 현재 관리 NIC를 임의로 미러 수신 포트로 바꾸지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 13. 백업·롤백 ==&lt;br /&gt;
&lt;br /&gt;
=== 13.1 일반 백업 ===&lt;br /&gt;
&lt;br /&gt;
Influx CLI 관리자 인증으로 여유 공간이 있는 새 디렉터리에 저장한다. Grafana 읽기 전용·Telegraf 쓰기 전용 토큰으로는 백업할 수 없다. [https://docs.influxdata.com/influxdb/v2/reference/cli/influx/backup/ InfluxDB backup].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
umask 077&lt;br /&gt;
MON_ARCHIVE=&amp;quot;/root/ipt-monitor-save-$(date +%Y%m%d-%H%M%S)&amp;quot;&lt;br /&gt;
install -d -m 700 &amp;quot;$MON_ARCHIVE&amp;quot;&lt;br /&gt;
influx backup &amp;quot;$MON_ARCHIVE/influxdb&amp;quot;&lt;br /&gt;
tar -czf &amp;quot;$MON_ARCHIVE/configs.tar.gz&amp;quot; \&lt;br /&gt;
    /etc/telegraf /etc/grafana /etc/rsyslog.conf /etc/rsyslog.d \&lt;br /&gt;
    /etc/logrotate.d/zyxel-remote /etc/chrony.conf /etc/firewalld \&lt;br /&gt;
    /etc/systemd/system/telegraf.service.d \&lt;br /&gt;
    /etc/systemd/system/influxdb.service.d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
백업에는 SNMP 비밀과 토큰이 포함된다. root 전용 권한을 유지하고 접근제어된 다른 매체에 암호화 복제한다. root 디스크에만 둔 것은 백업 완료로 간주하지 않는다.&lt;br /&gt;
&lt;br /&gt;
Grafana 기본 SQLite의 실행 중 파일만 단순 복사하지 않는다. 화면 중단이 허용되는 시간에 다음을 수행한다:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
systemctl stop grafana-server&lt;br /&gt;
tar -czf &amp;quot;$MON_ARCHIVE/grafana-data.tar.gz&amp;quot; /var/lib/grafana&lt;br /&gt;
systemctl start grafana-server&lt;br /&gt;
curl -fsS http://127.0.0.1:3000/api/health&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
이 동안 Telegraf 수집은 계속된다. 외부 DB를 사용하는 Grafana는 별도 DB 정합 백업이 필요하다. 장애 구간 Syslog·콜서버 pcap도 보존한다. 기록 중인 파일은 변경될 수 있으므로 닫힌 파일이나 정합 스냅샷으로 증거를 확보한다.&lt;br /&gt;
&lt;br /&gt;
=== 13.2 설정 변경 롤백 ===&lt;br /&gt;
&lt;br /&gt;
* 고주기 SNMP 부하: &amp;lt;code&amp;gt;20-zyxel-fast.conf&amp;lt;/code&amp;gt;의 interval을 5/10초로 복귀 후 검사·재시작. 긴급 시 &amp;lt;code&amp;gt;systemctl stop telegraf&amp;lt;/code&amp;gt;를 수행하고 수집 중단을 기록한다.&lt;br /&gt;
* Telegraf 오류: 해당 설정의 변경 전 버전 복원 → 검사 → 재시작. DB는 삭제하지 않는다.&lt;br /&gt;
* 신규 Syslog 설정만 취소하려면 아래처럼 비활성화한다. 수신 중단을 알리고 기존 파일을 수정했던 경우에는 변경 전 버전으로 복원한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mv /etc/rsyslog.d/30-zyxel-remote.conf /etc/rsyslog.d/30-zyxel-remote.conf.disabled&lt;br /&gt;
rsyslogd -N1&lt;br /&gt;
systemctl restart rsyslog&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* firewalld는 §10에서 추가한 정확히 일치하는 규칙만 제거한다.&lt;br /&gt;
* Akvorado 중지는 &amp;lt;code&amp;gt;/opt/akvorado&amp;lt;/code&amp;gt;에서 &amp;lt;code&amp;gt;docker compose stop&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;down -v&amp;lt;/code&amp;gt;, volume 삭제, ClickHouse DROP은 하지 않는다.&lt;br /&gt;
* 장비의 sFlow는 추가한 export 설정만 되돌린다. Voice VLAN·PoE·STP·QoS는 일괄 초기화하지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 13.3 데이터 복원·업그레이드 ===&lt;br /&gt;
&lt;br /&gt;
운영 InfluxDB에 full restore를 바로 수행하면 덮어쓰기 위험이 있다. 격리된 새 VM에 같은 버전으로 공식 restore 절차를 시험한다. Grafana는 중지 후 동일 구성의 데이터·설정을 복원하고 소유자/SELinux 라벨을 확인해 기동한다. 새 운영 데이터와의 통합은 별도 계획한다.&lt;br /&gt;
&lt;br /&gt;
업그레이드: RPM/이미지 버전 기록 → 백업 → 시험 VM 검증 → 운영 적용. 메이저 변경·DB schema 변경 후 바이너리만 내려서 롤백하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 14. 장애 확인표·인수 체크리스트 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 이상&lt;br /&gt;
! 첫 확인&lt;br /&gt;
|-&lt;br /&gt;
| SNMP timeout&lt;br /&gt;
| 같은 조건 CLI, 관리 경로·ACL·CPU·인증·암호화&lt;br /&gt;
|-&lt;br /&gt;
| No Such Object/Instance&lt;br /&gt;
| view·모델 지원·ifIndex·인터페이스 선택&lt;br /&gt;
|-&lt;br /&gt;
| Telegraf 값은 있는데 Grafana가 비어 있음&lt;br /&gt;
| DB 쓰기 토큰·bucket·measurement/tag·UTC/KST·시간 범위&lt;br /&gt;
|-&lt;br /&gt;
| 계단형 그래프·이상 피크&lt;br /&gt;
| 카운터 갱신 주기·리셋·결측·중복 수집&lt;br /&gt;
|-&lt;br /&gt;
| 재부팅 후 다른 포트 표시&lt;br /&gt;
| ifIndex 재조회, 고정 OID·태그 수정&lt;br /&gt;
|-&lt;br /&gt;
| Syslog는 도착하지만 파일 없음&lt;br /&gt;
| ruleset·구문·권한·SELinux·실제 송신 IP&lt;br /&gt;
|-&lt;br /&gt;
| sFlow 패킷만 도착&lt;br /&gt;
| 포트 매핑·디코딩·metadata·DB·시간·필터&lt;br /&gt;
|-&lt;br /&gt;
| PoE/CPU 없음&lt;br /&gt;
| 본 구성 미포함. 모델 전용 MIB 필요&lt;br /&gt;
|-&lt;br /&gt;
| 전화 장애 때 전체 데이터 결측&lt;br /&gt;
| VM/KVM 부하·관리 경로·NTP·수신 drop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 초기 구성 완료 조건 ===&lt;br /&gt;
&lt;br /&gt;
* ☐ OS/RPM 버전과 IP·포트 대응표를 저장했다.&lt;br /&gt;
* ☐ SNMPv3 읽기 전용으로 대상 조회 및 ifIndex를 확인했다.&lt;br /&gt;
* ☐ 실데이터의 bytes·PPS·Broadcast·Discard가 확인된다.&lt;br /&gt;
* ☐ Grafana가 누적값 대신 rate를 표시하고 상태는 원래 값으로 표시한다.&lt;br /&gt;
* ☐ DB 저장·화면 표시와 재부팅 후 수집 지속을 확인했다.&lt;br /&gt;
* ☐ 실장비 Syslog 저장과 logrotate dry-run을 확인했다.&lt;br /&gt;
* ☐ 콜서버·스위치와 NTP가 일치한다.&lt;br /&gt;
* ☐ DB/API 비공개, SSH·송신원 허용을 확인했다.&lt;br /&gt;
* ☐ 결측을 0/정상으로 표시하지 않는다.&lt;br /&gt;
* ☐ sFlow·PoE·CPU 미확인 항목을 완료 처리하지 않는다.&lt;br /&gt;
* ☐ 보존 만료 전 장애 증거 보관과 복원 방침을 정했다.&lt;br /&gt;
&lt;br /&gt;
== 15. 공식 자료·대상 버전 ==&lt;br /&gt;
&lt;br /&gt;
공식 자료 확인일: 2026-09-10. 지속 갱신 문서는 고정 게시일이 없으며 실제 RPM 버전을 §4 출력으로 기록한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 대상&lt;br /&gt;
! 공식 자료&lt;br /&gt;
|-&lt;br /&gt;
| Telegraf 1.x&lt;br /&gt;
| [https://docs.influxdata.com/telegraf/v1/install/ 설치] / [https://docs.influxdata.com/telegraf/v1/configuration/ 설정] / [https://docs.influxdata.com/telegraf/v1/input-plugins/snmp/ SNMP] / [https://docs.influxdata.com/telegraf/v1/input-plugins/ping/ Ping]&lt;br /&gt;
|-&lt;br /&gt;
| InfluxDB OSS 2.x&lt;br /&gt;
| [https://docs.influxdata.com/influxdb/v2/install/?t=Linux RPM 설치] / [https://docs.influxdata.com/influxdb/v2/reference/cli/influx/backup/ backup]&lt;br /&gt;
|-&lt;br /&gt;
| Flux&lt;br /&gt;
| [https://docs.influxdata.com/flux/v0/stdlib/universe/derivative/ derivative]&lt;br /&gt;
|-&lt;br /&gt;
| Grafana OSS&lt;br /&gt;
| [https://grafana.com/docs/grafana/latest/setup-grafana/installation/redhat-rhel-fedora/ RPM 설치] / [https://grafana.com/docs/grafana/latest/datasources/influxdb/configure/ InfluxDB 연결]&lt;br /&gt;
|-&lt;br /&gt;
| Net-SNMP&lt;br /&gt;
| [https://www.net-snmp.org/docs/man/snmp.conf.html snmp.conf]&lt;br /&gt;
|-&lt;br /&gt;
| IF-MIB&lt;br /&gt;
| [https://www.rfc-editor.org/rfc/rfc2863.html RFC 2863, 2000-06]&lt;br /&gt;
|-&lt;br /&gt;
| rsyslog 8.x&lt;br /&gt;
| [https://docs.rsyslog.com/doc/configuration/modules/imudp.html imudp] / [https://docs.rsyslog.com/doc/configuration/modules/omfile.html omfile]&lt;br /&gt;
|-&lt;br /&gt;
| Akvorado&lt;br /&gt;
| [https://github.com/akvorado/akvorado 공식 프로젝트] / [https://github.com/akvorado/akvorado/tree/main/docker Compose]&lt;br /&gt;
|-&lt;br /&gt;
| Docker Engine&lt;br /&gt;
| [https://docs.docker.com/engine/install/centos/ CentOS 설치 참고]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
추가로 필요한 정보: Zyxel L3/L2 모델·펌웨어·대수·관리 IP/Voice VLAN 구조. 확인 후 장비별 SNMPv3/Syslog/sFlow 명령과 CPU·PoE·큐 OID를 확정할 수 있다.&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=SNMP%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%84%9C%EB%B2%84&amp;diff=117</id>
		<title>SNMP테스트서버</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=SNMP%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%84%9C%EB%B2%84&amp;diff=117"/>
		<updated>2026-09-10T02:28:12Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: 새 문서: # Rocky Linux 9 · Zyxel 스위치 IPT 장애 모니터링 서버 구성 가이드  작성일: 2026-09-10 · 구성안 v1.0  ## 0. 목적·범위·검증 수준  **목적:** Zyxel L3/L2 → PoE 전화기 → PC 환경에서 전화 연결 실패 시 네트워크 혼잡·패킷 폐기·링크/PoE 이벤트가 동반되는지 기록한다. 콜서버의 TCP/UDP 5060 tcpdump는 별도로 수행하며 이 문서는 해당 설정을 변경하지 않는다.  - [확정] KVM VM / Rocky Li...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Rocky Linux 9 · Zyxel 스위치 IPT 장애 모니터링 서버 구성 가이드&lt;br /&gt;
&lt;br /&gt;
작성일: 2026-09-10 · 구성안 v1.0&lt;br /&gt;
&lt;br /&gt;
## 0. 목적·범위·검증 수준&lt;br /&gt;
&lt;br /&gt;
**목적:** Zyxel L3/L2 → PoE 전화기 → PC 환경에서 전화 연결 실패 시 네트워크 혼잡·패킷 폐기·링크/PoE 이벤트가 동반되는지 기록한다. 콜서버의 TCP/UDP 5060 tcpdump는 별도로 수행하며 이 문서는 해당 설정을 변경하지 않는다.&lt;br /&gt;
&lt;br /&gt;
- [확정] KVM VM / Rocky Linux 9, Zyxel L3/L2, 전화기 뒤 PC 연결, 콜서버 SIP 캡처 병행 계획.&lt;br /&gt;
- [미확인] 스위치 모델·펌웨어·대수·주소·Voice VLAN·콜서버 경로, SNMPv3 알고리즘, sFlow 지원, CPU/PoE 전용 OID.&lt;br /&gt;
- [제안] 먼저 **Telegraf + InfluxDB OSS 2.x + Grafana OSS + rsyslog**를 RPM/systemd로 직접 설치한다. 전체 포트 30초, 의심 포트/업링크 5초에서 시작하고 필요한 포트만 1초로 단축한다.&lt;br /&gt;
- **sFlow는 조건부 단계:** Akvorado가 후보지만 모델의 exporter 지원과 배포 릴리스 설정이 확정되지 않았으므로 §12는 준비·배포 검토·수신 검증 절차다. 아직 운영 기동을 보장하는 완성 설정이 아니다. SNMP/Syslog 기본 구성은 독립적으로 진행 가능하다.&lt;br /&gt;
- 실제 Rocky VM·Zyxel 장비에서 실행 시험한 문서는 아니다. 구성 예시를 정적 점검했으며 각 단계의 현장 검증을 통과한 후 진행한다.&lt;br /&gt;
&lt;br /&gt;
### 목차&lt;br /&gt;
&lt;br /&gt;
1. 구조와 준비값&lt;br /&gt;
2. 변경 영향·백업&lt;br /&gt;
3. 기본 패키지·시간 동기화&lt;br /&gt;
4. 저장소와 모니터링 패키지&lt;br /&gt;
5. InfluxDB 초기화·토큰 분리&lt;br /&gt;
6. SNMP/MIB 사전 조회&lt;br /&gt;
7. Telegraf 수집 구성&lt;br /&gt;
8. Grafana 데이터소스·패널&lt;br /&gt;
9. Syslog 수신·회전&lt;br /&gt;
10. 방화벽·접속 검증&lt;br /&gt;
11. 시험 운영과 장애 분석&lt;br /&gt;
12. sFlow 조건부 추가&lt;br /&gt;
13. 백업·롤백·업그레이드&lt;br /&gt;
14. 장애 확인표·인수 체크리스트&lt;br /&gt;
15. 공식 자료&lt;br /&gt;
&lt;br /&gt;
## 1. 구조와 준비값&lt;br /&gt;
&lt;br /&gt;
| 서비스 | 설치 방식 | 연결/저장 |&lt;br /&gt;
|---|---|---|&lt;br /&gt;
| Telegraf 1.x | RPM / telegraf.service | 스위치 UDP/161 조회 → 로컬 InfluxDB |&lt;br /&gt;
| InfluxDB OSS 2.x | RPM / influxdb.service | 127.0.0.1:8086, 30일 raw bucket |&lt;br /&gt;
| Grafana OSS | RPM / grafana-server.service | 127.0.0.1:3000, SSH 터널 접속 |&lt;br /&gt;
| rsyslog 8.x | Rocky RPM / rsyslog.service | UDP/514 → /var/log/zyxel/&amp;lt;송신IP&amp;gt;/events.log |&lt;br /&gt;
| Akvorado 배포 스택 | 별도 검토 후 공식 Docker Compose | sFlow UDP/6343 → ClickHouse 등 |&lt;br /&gt;
&lt;br /&gt;
SNMP Trap UDP/162는 이번 기본 구성에 포함하지 않는다. Rocky를 조회하는 SNMP agent인 `snmpd`도 불필요하다. 이 서버는 SNMP 조회자다.&lt;br /&gt;
&lt;br /&gt;
### 준비표 — 모든 `&amp;lt;...&amp;gt;`를 실제 값으로 교체&lt;br /&gt;
&lt;br /&gt;
| 자리표시자 | 의미 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| `&amp;lt;COLLECTOR_IP&amp;gt;` | Rocky VM 고정 IPv4 |&lt;br /&gt;
| `&amp;lt;FW_ZONE&amp;gt;` | 관리 NIC에 실제 적용된 firewalld zone |&lt;br /&gt;
| `&amp;lt;SWITCH_SOURCE_CIDR&amp;gt;` | 실제 Syslog 송신 IP /32 또는 승인된 스위치 관리 대역 |&lt;br /&gt;
| `&amp;lt;SWITCH_IP&amp;gt;` / `&amp;lt;SWITCH_NAME&amp;gt;` | 수집 대상 관리 IP / 식별 이름 |&lt;br /&gt;
| `&amp;lt;IFINDEX&amp;gt;` / `&amp;lt;PORT_LABEL&amp;gt;` | SNMP 조회로 확인한 인덱스 / 포트명 |&lt;br /&gt;
| `&amp;lt;CALLSERVER_IP&amp;gt;` | 콜서버 IP |&lt;br /&gt;
| `&amp;lt;SNMP_USER&amp;gt;` 등 | 읽기 전용 SNMPv3 계정·인증값 |&lt;br /&gt;
| `&amp;lt;NTP_SERVER&amp;gt;` | 콜서버/스위치와 맞춘 승인된 시간 서버 |&lt;br /&gt;
&lt;br /&gt;
소규모 시작 가정: 기본 구성 4 vCPU / RAM 8GB / SSD 100~200GB. Akvorado 동시 운영은 8 vCPU / RAM 16~32GB / SSD 300~500GB부터 부하 시험한다. 이는 보장 사양이 아니며 포트 수·샘플 PPS·저장량으로 조정한다. KVM CPU 과할당, 메모리 ballooning 및 호스트 디스크 포화를 피한다.&lt;br /&gt;
&lt;br /&gt;
VM은 VirtIO NIC를 KVM 관리 브리지에 연결하고, 스위치까지 라우팅 가능한 고정 IP를 사용한다. SNMP/sFlow에는 미러 포트나 promiscuous 설정이 필요 없다. 같은 VLAN이 필수도 아니다. NAT는 SNMP 접근제어와 sFlow 송신자 식별을 복잡하게 하므로 가능한 관리망 브리지/라우팅 연결을 사용한다.&lt;br /&gt;
&lt;br /&gt;
### 관측 범위 한계&lt;br /&gt;
&lt;br /&gt;
- 전화기 연결 물리 포트의 카운터는 전화기와 PC 합산이다. IF-MIB만으로 Voice/Data를 분리할 수 없다.&lt;br /&gt;
- 같은 L2 내부에서 끝나는 트래픽은 L3만 관측해서는 보이지 않을 수 있다.&lt;br /&gt;
- 수집 경로가 폭주 구간과 겹치면 장애 때 데이터도 빠진다. OOB가 없으면 코어에 가까운 안정적 관리 경로를 확보한다.&lt;br /&gt;
- 1초 SNMP는 1초 구간 평균이며 장비 내부 카운터 갱신이 1초보다 느릴 수 있다. Microburst 부재를 증명하지 못한다.&lt;br /&gt;
&lt;br /&gt;
## 2. 변경 영향·백업&lt;br /&gt;
&lt;br /&gt;
전제는 **신규 전용 VM**이다. 기존 운영 서버에 적용한다면 같은 이름의 설정을 덮어쓰지 말고 병합한다. 기존 Telegraf 입력/출력, rsyslog 입력 포트, Grafana, InfluxDB 데이터가 있으면 본 초기화 절차를 중단한다.&lt;br /&gt;
&lt;br /&gt;
위험 및 롤백 원칙:&lt;br /&gt;
&lt;br /&gt;
- 패키지 설치 자체로 전화 경로를 변경하지 않는다. 다만 고주기 SNMP/sFlow는 스위치 관리 CPU와 저장량을 증가시킬 수 있다.&lt;br /&gt;
- rsyslog 재시작 동안 로그 수신에 짧은 공백이 발생할 수 있다.&lt;br /&gt;
- 보존기간 만료/로그 회전은 오래된 데이터를 자동 제거한다. 장애 증거는 만료 전에 별도 보관한다.&lt;br /&gt;
- 방화벽은 기존 zone/SSH를 유지하고 특정 송신자 규칙만 추가한다. 실패하면 추가한 규칙만 제거한다.&lt;br /&gt;
- `firewall-cmd --complete-reload`는 설정 백업 복원이 아니다. 사용하지 않는다.&lt;br /&gt;
- VM 스냅샷은 단기 변경 복구용이며 별도 백업을 대체하지 않는다. 복원하면 스냅샷 이후 수집 데이터가 사라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
root 셸에서 실행한다. 아래 백업 변수는 이 작업용이며 동일 셸에서 유지한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
umask 077&lt;br /&gt;
MON_BACKUP=&amp;quot;/root/ipt-monitor-backup-$(date +%Y%m%d-%H%M%S)&amp;quot;&lt;br /&gt;
install -d -m 700 &amp;quot;$MON_BACKUP&amp;quot;&lt;br /&gt;
cp -a /etc/rsyslog.conf &amp;quot;$MON_BACKUP/&amp;quot;&lt;br /&gt;
cp -a /etc/rsyslog.d &amp;quot;$MON_BACKUP/&amp;quot;&lt;br /&gt;
cp -a /etc/chrony.conf &amp;quot;$MON_BACKUP/&amp;quot;&lt;br /&gt;
cp -a /etc/firewalld &amp;quot;$MON_BACKUP/&amp;quot;&lt;br /&gt;
firewall-cmd --list-all-zones &amp;gt; &amp;quot;$MON_BACKUP/firewall-runtime.txt&amp;quot;&lt;br /&gt;
firewall-cmd --permanent --list-all-zones &amp;gt; &amp;quot;$MON_BACKUP/firewall-permanent.txt&amp;quot;&lt;br /&gt;
rpm -qa | sort &amp;gt; &amp;quot;$MON_BACKUP/packages-before.txt&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
firewalld가 미설치/미실행이면 해당 명령 실패를 무시한 채 진행하지 말고, 현재 호스트 방화벽 구성과 SSH 허용부터 확인한다. KVM 콘솔을 확보한다. 스위치 설정도 GUI의 configuration backup으로 별도 내려받는다.&lt;br /&gt;
&lt;br /&gt;
## 3. 기본 패키지·시간 동기화&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
cat /etc/rocky-release&lt;br /&gt;
uname -m&lt;br /&gt;
ip -br address&lt;br /&gt;
ip route&lt;br /&gt;
df -hT&lt;br /&gt;
free -h&lt;br /&gt;
getenforce&lt;br /&gt;
ss -lntup&lt;br /&gt;
&lt;br /&gt;
dnf install -y curl ca-certificates gnupg2 vim-enhanced \&lt;br /&gt;
    net-snmp-utils rsyslog logrotate chrony tcpdump iputils \&lt;br /&gt;
    sysstat policycoreutils-python-utils dnf-plugins-core&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
네트워크·SELinux는 일괄 비활성화하지 않는다. 신규 OS 업데이트/재부팅은 수집 시작 전 점검 시간에 수행한다.&lt;br /&gt;
&lt;br /&gt;
`/etc/chrony.conf`의 기존 시간 서버 정책을 확인하고, 승인된 서버로 맞춘다. 다음 한 줄은 설정 파일 예시이며 셸 명령이 아니다.&lt;br /&gt;
&lt;br /&gt;
```conf&lt;br /&gt;
server &amp;lt;NTP_SERVER&amp;gt; iburst&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
timedatectl set-timezone Asia/Seoul&lt;br /&gt;
systemctl enable --now chronyd&lt;br /&gt;
systemctl restart chronyd&lt;br /&gt;
chronyc tracking&lt;br /&gt;
chronyc sources -v&lt;br /&gt;
date -Ins&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
정상 기준: 선택된 소스 `^*`, 동기화 정상, 콜서버 및 스위치와 시간 차이가 분석 해상도보다 충분히 작음. 1초 분석은 가능하면 100ms 미만 오차를 목표로 한다. 큰 시간 보정은 수집 시작 전에 한다.&lt;br /&gt;
&lt;br /&gt;
## 4. 공식 저장소와 패키지 설치&lt;br /&gt;
&lt;br /&gt;
이 가이드는 **InfluxDB OSS 2.x / Flux**용이다. InfluxDB 3의 SQL 설정과 혼용하지 않는다. 최신 버전이라는 의미가 아니라 본 가이드의 호환 대상이다. 저장소에서 설치 가능한 정확한 RPM 버전을 먼저 확인·기록한다.&lt;br /&gt;
&lt;br /&gt;
공식 설치 근거: [InfluxDB 2 RPM 설치](https://docs.influxdata.com/influxdb/v2/install/?t=Linux), [Telegraf RPM 설치](https://docs.influxdata.com/telegraf/v1/install/), [Grafana OSS RPM 설치](https://grafana.com/docs/grafana/latest/setup-grafana/installation/redhat-rhel-fedora/). 지속 갱신 문서, 확인일 2026-09-10.&lt;br /&gt;
&lt;br /&gt;
### 4.1 InfluxData 저장소&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
curl -fL https://repos.influxdata.com/influxdata-archive.key \&lt;br /&gt;
    -o /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
gpg --show-keys --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
확인한 공식 문서의 기본키 fingerprint: `24C975CBA61A024EE1B631787C3D57159FC2F927`. 일치하지 않으면 키 교체 공지를 공식 문서에서 확인하기 전에는 import하지 않는다. `gpgcheck=0` 또는 `--nogpgcheck`로 우회하지 않는다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
vi /etc/yum.repos.d/influxdata.repo&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
파일 내용 (`$basearch`는 DNF가 해석하므로 그대로 둔다):&lt;br /&gt;
&lt;br /&gt;
```ini&lt;br /&gt;
[influxdata]&lt;br /&gt;
name=InfluxData Repository - Stable&lt;br /&gt;
baseurl=https://repos.influxdata.com/stable/$basearch/main&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata&lt;br /&gt;
sslverify=1&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 4.2 Grafana 저장소&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
vi /etc/yum.repos.d/grafana.repo&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```ini&lt;br /&gt;
[grafana]&lt;br /&gt;
name=Grafana OSS repository&lt;br /&gt;
baseurl=https://rpm.grafana.com&lt;br /&gt;
repo_gpgcheck=1&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=https://rpm.grafana.com/gpg.key&lt;br /&gt;
sslverify=1&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
Grafana 키 import 요청 시 공식 키/문서와 대조한다. 패키지는 `grafana`이며 `grafana-enterprise`를 설치하지 않는다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
dnf makecache&lt;br /&gt;
dnf list --showduplicates telegraf influxdb2 influxdb2-cli grafana&lt;br /&gt;
dnf install telegraf influxdb2 influxdb2-cli grafana&lt;br /&gt;
rpm -q telegraf influxdb2 influxdb2-cli grafana rsyslog&lt;br /&gt;
telegraf --version&lt;br /&gt;
influxd version&lt;br /&gt;
influx version&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`influxdb2-cli`가 저장소에 없다면 임의의 다른 CLI를 설치하지 말고 공식 InfluxDB 2 CLI 설치 방법으로 해당 아키텍처의 서명/체크섬 검증된 패키지를 설치한다. 서버/CLI의 버전 번호는 서로 같지 않을 수 있다.&lt;br /&gt;
&lt;br /&gt;
이후 원격 운영 전 위 버전 출력을 작업 기록에 보관한다. Telegraf/Grafana는 검증된 버전을 변경 관리 대상으로 관리하고 장애 조사 중 자동 업그레이드는 하지 않는다.&lt;br /&gt;
&lt;br /&gt;
## 5. InfluxDB 초기 설정 및 권한 분리&lt;br /&gt;
&lt;br /&gt;
### 5.1 로컬에서만 API 수신&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
install -d -m 755 /etc/systemd/system/influxdb.service.d&lt;br /&gt;
vi /etc/systemd/system/influxdb.service.d/10-ipt-listen.conf&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```ini&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;INFLUXD_HTTP_BIND_ADDRESS=127.0.0.1:8086&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now influxdb&lt;br /&gt;
systemctl restart influxdb&lt;br /&gt;
systemctl status influxdb --no-pager&lt;br /&gt;
ss -lntp | grep &#039;:8086&#039;&lt;br /&gt;
curl -fsS http://127.0.0.1:8086/health&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
정상: `127.0.0.1:8086`에만 수신, health 정상. 전체 주소로 열리면 서비스/설정의 기존 바인딩 override를 확인한다. VM 방화벽에 8086을 열지 않는다.&lt;br /&gt;
&lt;br /&gt;
### 5.2 초기화&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
influx setup&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
대화형 입력값:&lt;br /&gt;
&lt;br /&gt;
| 항목 | 입력 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| Username | 전용 관리자 계정 |&lt;br /&gt;
| Password | 고유한 강한 암호 |&lt;br /&gt;
| Organization | `network` |&lt;br /&gt;
| Bucket | `snmp_raw` |&lt;br /&gt;
| Retention | `720h` (30일) |&lt;br /&gt;
&lt;br /&gt;
이미 setup 완료로 표시되면 재초기화하지 말고 기존 조직·bucket을 확인한다. `influx bucket list`로 `snmp_raw` retention이 무제한이 아닌 720h인지 검증한다. 별도 테스트 환경이 아닌 기존 DB를 삭제해서 다시 시작하지 않는다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
influx bucket list --org network&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 5.3 관리자 접속과 서비스 토큰&lt;br /&gt;
&lt;br /&gt;
관리자 PC에서 SSH 터널을 유지한다. `127.0.0.1`은 PC 자신의 주소이며 SSH가 VM으로 전달한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
ssh -N -L 8086:127.0.0.1:8086 -L 3000:127.0.0.1:3000 &amp;lt;SSH_USER&amp;gt;@&amp;lt;COLLECTOR_IP&amp;gt;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
브라우저에서 `http://127.0.0.1:8086` 접속 → API Tokens → Custom Token:&lt;br /&gt;
&lt;br /&gt;
| 토큰 이름 | 범위 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| `telegraf-write` | `snmp_raw` Write만 |&lt;br /&gt;
| `grafana-read` | `snmp_raw` Read만 |&lt;br /&gt;
| 초기 Operator 토큰 | 관리자 초기화·백업용, 서비스에 배포 금지 |&lt;br /&gt;
&lt;br /&gt;
발급된 토큰은 승인된 비밀 관리 위치에 보관한다. 화면/문서/채팅에 붙여넣지 않는다. 초기 CLI credential도 비밀이며 root만 읽게 유지한다. Grafana 연결에 필요한 읽기 권한과 Telegraf 쓰기 권한을 분리한다.&lt;br /&gt;
&lt;br /&gt;
## 6. SNMP 및 MIB 사전 확인&lt;br /&gt;
&lt;br /&gt;
### 6.1 Zyxel 측 선행 작업&lt;br /&gt;
&lt;br /&gt;
모델별 UI/CLI가 다르므로 임의 명령을 넣지 않는다. 관리 화면에서 다음 항목을 구성한다.&lt;br /&gt;
&lt;br /&gt;
- SNMP 활성화, SNMPv3 읽기 전용 사용자.&lt;br /&gt;
- 인증/암호화 알고리즘은 장비와 Rocky가 함께 지원하는 조합. 아래 예시는 SHA/AES이며 다른 알고리즘이면 양쪽을 같이 수정.&lt;br /&gt;
- 조회 허용 원본은 Rocky 관리 IP. NAT가 있다면 장비에 보이는 실제 원본 IP 확인.&lt;br /&gt;
- IF-MIB/system 조회 권한. 빈 테이블을 기능 미지원으로 단정하기 전 SNMP view 확인.&lt;br /&gt;
- 포트 description에는 전화기 내선/위치나 업링크 상대를 운영 규칙에 따라 기록하되 개인정보 최소화.&lt;br /&gt;
&lt;br /&gt;
### 6.2 CLI credential을 명령행에 노출하지 않기&lt;br /&gt;
&lt;br /&gt;
아래는 root 조회용 Net-SNMP 사용자 설정이다. 기존 파일이 있으면 백업 후 병합한다. Telegraf는 이 파일을 사용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
install -d -m 700 /root/.snmp&lt;br /&gt;
vi /root/.snmp/snmp.conf&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```conf&lt;br /&gt;
defVersion 3&lt;br /&gt;
defSecurityName &amp;lt;SNMP_USER&amp;gt;&lt;br /&gt;
defSecurityLevel authPriv&lt;br /&gt;
defAuthType SHA&lt;br /&gt;
defAuthPassphrase &amp;lt;SNMP_AUTH_PASSWORD&amp;gt;&lt;br /&gt;
defPrivType AES&lt;br /&gt;
defPrivPassphrase &amp;lt;SNMP_PRIV_PASSWORD&amp;gt;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
chmod 600 /root/.snmp/snmp.conf&lt;br /&gt;
snmpget -v3 -t 2 -r 0 -On &amp;lt;SWITCH_IP&amp;gt; .1.3.6.1.2.1.1.3.0&lt;br /&gt;
snmpwalk -v3 -t 2 -r 0 -On &amp;lt;SWITCH_IP&amp;gt; .1.3.6.1.2.1.31.1.1.1.1&lt;br /&gt;
snmpwalk -v3 -t 2 -r 0 -On &amp;lt;SWITCH_IP&amp;gt; .1.3.6.1.2.1.31.1.1.1.18&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`ifName` OID의 마지막 숫자가 ifIndex다. 실제 포트 번호와 같다고 가정하지 않는다. 스위치 IP·포트명·ifIndex·전화기 IP·내선을 기록하고 재부팅/스택 변경 후 재확인한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
snmpget -v3 -t 2 -r 0 -On &amp;lt;SWITCH_IP&amp;gt; \&lt;br /&gt;
    .1.3.6.1.2.1.31.1.1.1.6.&amp;lt;IFINDEX&amp;gt; \&lt;br /&gt;
    .1.3.6.1.2.1.31.1.1.1.10.&amp;lt;IFINDEX&amp;gt; \&lt;br /&gt;
    .1.3.6.1.2.1.31.1.1.1.15.&amp;lt;IFINDEX&amp;gt; \&lt;br /&gt;
    .1.3.6.1.2.1.2.2.1.8.&amp;lt;IFINDEX&amp;gt;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
정상: Counter64 / Counter64 / Mbps 단위 속도 / operStatus 값. Timeout이면 경로·ACL·SNMP credential, No Such Instance면 인덱스, No Such Object면 view/지원 확인. 지원하지 않는 필드는 수집 설정에서 제외하고 미수집으로 기록한다. 0으로 대체하지 않는다.&lt;br /&gt;
&lt;br /&gt;
### 6.3 MIB 파일 정책&lt;br /&gt;
&lt;br /&gt;
기본 수집은 숫자 OID + 명시적 field name을 사용한다. IF-MIB 파일 로딩 실패와 원격 SNMP 조회 실패는 별개다. `net-snmp-config`는 기본 utils 패키지에 없을 수 있어 필수 명령으로 사용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
rpm -ql net-snmp-libs | grep &#039;/mibs/&#039;&lt;br /&gt;
snmptranslate -On IF-MIB::ifHCInOctets&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
제조사 MIB는 Zyxel 공식 지원 페이지에서 **정확한 모델/펌웨어용 묶음**을 받는다. CPU·PoE·큐 드롭 OID는 확인 전 추가하지 않는다. SNMPv3 쓰기 권한 또는 PoE 전원 제어는 수집기에 부여하지 않는다.&lt;br /&gt;
&lt;br /&gt;
## 7. Telegraf 구성&lt;br /&gt;
&lt;br /&gt;
### 7.1 메인 파일과 환경 파일&lt;br /&gt;
&lt;br /&gt;
기존 설정 교체 시 수집 공백 발생 가능. 신규 전용 VM에서 기본 예제 설정을 백업한 후 아래 내용으로 교체한다. `/etc/telegraf/telegraf.d/`에 기존 활성 conf가 있으면 먼저 내용을 확인한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
cp -a /etc/telegraf/telegraf.conf &amp;quot;$MON_BACKUP/telegraf.conf.package&amp;quot;&lt;br /&gt;
ls -l /etc/telegraf/telegraf.d/&lt;br /&gt;
vi /etc/telegraf/telegraf.conf&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```toml&lt;br /&gt;
[agent]&lt;br /&gt;
  interval = &amp;quot;30s&amp;quot;&lt;br /&gt;
  round_interval = true&lt;br /&gt;
  flush_interval = &amp;quot;5s&amp;quot;&lt;br /&gt;
  precision = &amp;quot;1ms&amp;quot;&lt;br /&gt;
  metric_batch_size = 1000&lt;br /&gt;
  metric_buffer_limit = 20000&lt;br /&gt;
  omit_hostname = false&lt;br /&gt;
  snmp_translator = &amp;quot;gosmi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[outputs.influxdb_v2]]&lt;br /&gt;
  urls = [&amp;quot;http://127.0.0.1:8086&amp;quot;]&lt;br /&gt;
  token = &amp;quot;${INFLUX_WRITE_TOKEN}&amp;quot;&lt;br /&gt;
  organization = &amp;quot;network&amp;quot;&lt;br /&gt;
  bucket = &amp;quot;snmp_raw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[inputs.internal]]&lt;br /&gt;
[[inputs.cpu]]&lt;br /&gt;
  percpu = false&lt;br /&gt;
  totalcpu = true&lt;br /&gt;
[[inputs.mem]]&lt;br /&gt;
[[inputs.disk]]&lt;br /&gt;
  mount_points = [&amp;quot;/&amp;quot;]&lt;br /&gt;
[[inputs.net]]&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
별도 데이터 디스크를 쓰면 실제 마운트 경로를 `mount_points`에 추가한다. `inputs.cpu`는 Rocky VM의 CPU이며 스위치 CPU가 아니다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
vi /etc/telegraf/ipt-monitor.env&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```conf&lt;br /&gt;
INFLUX_WRITE_TOKEN=&#039;&amp;lt;TELEGRAF_WRITE_TOKEN&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_USER=&#039;&amp;lt;SNMP_USER&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_AUTH=&#039;&amp;lt;SNMP_AUTH_PASSWORD&amp;gt;&#039;&lt;br /&gt;
ZYXEL_SNMP_PRIV=&#039;&amp;lt;SNMP_PRIV_PASSWORD&amp;gt;&#039;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
위 파일은 systemd EnvironmentFile 형식이다. 셸에서 source로 읽지 않는다. 비밀값에 큰따옴표/역슬래시가 있으면 TOML 확장 시 구문에 영향을 줄 수 있으므로 공식 secret store를 사용하거나 이스케이프를 검증한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
chown root:root /etc/telegraf/ipt-monitor.env&lt;br /&gt;
chmod 600 /etc/telegraf/ipt-monitor.env&lt;br /&gt;
install -d -m 755 /etc/systemd/system/telegraf.service.d&lt;br /&gt;
vi /etc/systemd/system/telegraf.service.d/10-ipt-monitor.conf&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```ini&lt;br /&gt;
[Service]&lt;br /&gt;
EnvironmentFile=/etc/telegraf/ipt-monitor.env&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
systemd가 환경 파일을 읽어 서비스에 전달한다. 일반 사용자의 읽기는 막지만 root나 동일 서비스 권한으로부터 완전히 숨기는 방식은 아니다.&lt;br /&gt;
&lt;br /&gt;
### 7.2 전체 포트 30초 수집&lt;br /&gt;
&lt;br /&gt;
`/etc/telegraf/telegraf.d/10-zyxel-ports.conf`를 작성한다. 한 대의 예시이며 같은 credential을 쓰는 장비는 `agents`에 추가한다. 인증값이 다르면 입력 블록과 환경변수 이름을 분리한다.&lt;br /&gt;
&lt;br /&gt;
**table 본체에는 oid를 지정하지 않는다.** 필요한 열만 아래 field로 선택해 전체 테이블의 불필요한 열 조회를 피한다.&lt;br /&gt;
&lt;br /&gt;
```toml&lt;br /&gt;
[[inputs.snmp]]&lt;br /&gt;
  agents = [&amp;quot;udp://&amp;lt;SWITCH_IP&amp;gt;:161&amp;quot;]&lt;br /&gt;
  version = 3&lt;br /&gt;
  sec_name = &amp;quot;${ZYXEL_SNMP_USER}&amp;quot;&lt;br /&gt;
  sec_level = &amp;quot;authPriv&amp;quot;&lt;br /&gt;
  auth_protocol = &amp;quot;SHA&amp;quot;&lt;br /&gt;
  auth_password = &amp;quot;${ZYXEL_SNMP_AUTH}&amp;quot;&lt;br /&gt;
  priv_protocol = &amp;quot;AES&amp;quot;&lt;br /&gt;
  priv_password = &amp;quot;${ZYXEL_SNMP_PRIV}&amp;quot;&lt;br /&gt;
  timeout = &amp;quot;2s&amp;quot;&lt;br /&gt;
  retries = 0&lt;br /&gt;
  interval = &amp;quot;30s&amp;quot;&lt;br /&gt;
  agent_host_tag = &amp;quot;source&amp;quot;&lt;br /&gt;
  name = &amp;quot;switch_system&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;uptime&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.1.3.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [[inputs.snmp.table]]&lt;br /&gt;
    name = &amp;quot;switch_port&amp;quot;&lt;br /&gt;
    index_as_tag = true&lt;br /&gt;
    inherit_tags = [&amp;quot;source&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;if_name&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.1&amp;quot;&lt;br /&gt;
      is_tag = true&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;if_alias&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.18&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_octets&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.6&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_octets&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.10&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_ucast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.7&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_mcast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.8&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_bcast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.9&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_ucast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.11&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_mcast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.12&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_bcast&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.13&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;speed_mbps&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.15&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;discontinuity&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.19&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;oper_status&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.8&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_discards&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.13&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_discards&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.19&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;in_errors&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.14&amp;quot;&lt;br /&gt;
    [[inputs.snmp.table.field]]&lt;br /&gt;
      name = &amp;quot;out_errors&amp;quot;&lt;br /&gt;
      oid = &amp;quot;.1.3.6.1.2.1.2.2.1.20&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`if_alias`는 설명 변경에 따른 series 증가를 줄이기 위해 field로 저장한다. 실제 출력에 `source`, `index`, `if_name` 태그가 있는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
### 7.3 중요 포트 5초 수집&lt;br /&gt;
&lt;br /&gt;
`/etc/telegraf/telegraf.d/20-zyxel-fast.conf`를 작성한다. 필요한 포트 수만큼 블록을 복제하고 IP·ifIndex·태그를 모두 바꾼다. 같은 포트의 중복 설정은 금지하며 일반 수집과 measurement를 분리한다.&lt;br /&gt;
&lt;br /&gt;
```toml&lt;br /&gt;
[[inputs.snmp]]&lt;br /&gt;
  agents = [&amp;quot;udp://&amp;lt;SWITCH_IP&amp;gt;:161&amp;quot;]&lt;br /&gt;
  version = 3&lt;br /&gt;
  sec_name = &amp;quot;${ZYXEL_SNMP_USER}&amp;quot;&lt;br /&gt;
  sec_level = &amp;quot;authPriv&amp;quot;&lt;br /&gt;
  auth_protocol = &amp;quot;SHA&amp;quot;&lt;br /&gt;
  auth_password = &amp;quot;${ZYXEL_SNMP_AUTH}&amp;quot;&lt;br /&gt;
  priv_protocol = &amp;quot;AES&amp;quot;&lt;br /&gt;
  priv_password = &amp;quot;${ZYXEL_SNMP_PRIV}&amp;quot;&lt;br /&gt;
  timeout = &amp;quot;800ms&amp;quot;&lt;br /&gt;
  retries = 0&lt;br /&gt;
  interval = &amp;quot;5s&amp;quot;&lt;br /&gt;
  agent_host_tag = &amp;quot;source&amp;quot;&lt;br /&gt;
  name = &amp;quot;switch_port_fast&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [inputs.snmp.tags]&lt;br /&gt;
    if_name = &amp;quot;&amp;lt;PORT_LABEL&amp;gt;&amp;quot;&lt;br /&gt;
    index = &amp;quot;&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_octets&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.6.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_octets&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.10.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_ucast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.7.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_mcast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.8.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_bcast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.9.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_ucast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.11.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_mcast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.12.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_bcast&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.13.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;in_discards&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.2.2.1.13.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;out_discards&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.2.2.1.19.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;oper_status&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.2.2.1.8.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
  [[inputs.snmp.field]]&lt;br /&gt;
    name = &amp;quot;discontinuity&amp;quot;&lt;br /&gt;
    oid = &amp;quot;.1.3.6.1.2.1.31.1.1.1.19.&amp;lt;IFINDEX&amp;gt;&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
표준 정의: [RFC 2863](https://www.rfc-editor.org/rfc/rfc2863.html). 각 열의 지원 여부는 실장비에서 확인한다.&lt;br /&gt;
&lt;br /&gt;
1초 수집은 해당 블록의 `interval = &amp;quot;1s&amp;quot;`로 변경한다. 먼저 카운터 갱신과 수집 소요시간을 확인한다. 800ms는 개별 요청 timeout이지 전체 수집 완료 보장이 아니다. 실패를 반복 재시도하지 않고 결측으로 남긴다. DB에 5초마다 묶어 써도 원래 수집 timestamp는 유지된다.&lt;br /&gt;
&lt;br /&gt;
### 7.4 응답시간·손실 보조 수집&lt;br /&gt;
&lt;br /&gt;
`/etc/telegraf/telegraf.d/30-ipt-ping.conf`:&lt;br /&gt;
&lt;br /&gt;
```toml&lt;br /&gt;
[[inputs.ping]]&lt;br /&gt;
  urls = [&amp;quot;&amp;lt;SWITCH_IP&amp;gt;&amp;quot;, &amp;quot;&amp;lt;CALLSERVER_IP&amp;gt;&amp;quot;]&lt;br /&gt;
  method = &amp;quot;native&amp;quot;&lt;br /&gt;
  privileged = true&lt;br /&gt;
  count = 1&lt;br /&gt;
  deadline = &amp;quot;1s&amp;quot;&lt;br /&gt;
  interval = &amp;quot;5s&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
승인된 시험 전화기 IP를 필요 시 추가한다. ICMP 비응답 장비는 제외한다. 콜서버 Ping은 SIP 서비스 감시가 아니며 VM에서의 경로도 전화기에서의 경로와 같다고 보장할 수 없다.&lt;br /&gt;
&lt;br /&gt;
`/etc/systemd/system/telegraf.service.d/10-ipt-monitor.conf`의 같은 `[Service]`에 추가한다:&lt;br /&gt;
&lt;br /&gt;
```ini&lt;br /&gt;
CapabilityBoundingSet=CAP_NET_RAW&lt;br /&gt;
AmbientCapabilities=CAP_NET_RAW&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
Telegraf를 root로 실행하는 설정은 아니다. [공식 Ping 권한 설명](https://docs.influxdata.com/telegraf/v1/input-plugins/ping/). 기존 입력이 있으면 필요한 capability를 제거하지 않도록 확인한다.&lt;br /&gt;
&lt;br /&gt;
### 7.5 검사·기동&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
chown root:telegraf /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.d/*-*.conf&lt;br /&gt;
chmod 640 /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.d/*-*.conf&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemd-run --unit=ipt-telegraf-check --wait --pipe --collect \&lt;br /&gt;
    -p User=telegraf -p Group=telegraf \&lt;br /&gt;
    -p EnvironmentFile=/etc/telegraf/ipt-monitor.env \&lt;br /&gt;
    -p CapabilityBoundingSet=CAP_NET_RAW \&lt;br /&gt;
    -p AmbientCapabilities=CAP_NET_RAW \&lt;br /&gt;
    /usr/bin/telegraf --config /etc/telegraf/telegraf.conf \&lt;br /&gt;
    --config-directory /etc/telegraf/telegraf.d --test&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
실제로 SNMP/Ping을 한 번 수집하는 검사다. 출력의 IP 등은 사내 정보로 취급한다. `--test`는 InfluxDB 쓰기를 검증하지 않는다. 수집 검사 성공 후:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
systemctl enable --now telegraf&lt;br /&gt;
systemctl restart telegraf&lt;br /&gt;
systemctl status telegraf --no-pager&lt;br /&gt;
journalctl -u telegraf -n 100 --no-pager&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
설정 근거: [SNMP Input Plugin](https://docs.influxdata.com/telegraf/v1/input-plugins/snmp/), [Telegraf 설정](https://docs.influxdata.com/telegraf/v1/configuration/). 입력과 DB 출력이 모두 성공하는지 확인하고 unauthorized, timeout, collection interval 초과, buffer/drop 메시지를 조사한다.&lt;br /&gt;
&lt;br /&gt;
## 8. Grafana 구성과 계산&lt;br /&gt;
&lt;br /&gt;
### 8.1 서비스&lt;br /&gt;
&lt;br /&gt;
먼저 백업한 뒤 `/etc/grafana/grafana.ini`의 기존 섹션을 수정한다. 중복 섹션을 추가하지 않는다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
cp -a /etc/grafana/grafana.ini &amp;quot;$MON_BACKUP/grafana.ini.initial&amp;quot;&lt;br /&gt;
vi /etc/grafana/grafana.ini&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```ini&lt;br /&gt;
[server]&lt;br /&gt;
http_addr = 127.0.0.1&lt;br /&gt;
http_port = 3000&lt;br /&gt;
&lt;br /&gt;
[users]&lt;br /&gt;
allow_sign_up = false&lt;br /&gt;
&lt;br /&gt;
[auth.anonymous]&lt;br /&gt;
enabled = false&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
systemctl enable --now grafana-server&lt;br /&gt;
systemctl restart grafana-server&lt;br /&gt;
systemctl status grafana-server --no-pager&lt;br /&gt;
curl -fsS http://127.0.0.1:3000/api/health&lt;br /&gt;
ss -lntp | grep &#039;:3000&#039;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
초기 관리자로 로그인 후 즉시 강한 비밀번호로 변경한다. SSH 터널의 `http://127.0.0.1:3000`을 사용한다. 공유 접속이 필요하면 인증·TLS reverse proxy와 접근제어를 별도 구성하며 평문 HTTP를 전사망에 개방하지 않는다.&lt;br /&gt;
&lt;br /&gt;
### 8.2 InfluxDB 데이터소스&lt;br /&gt;
&lt;br /&gt;
Connections → Data sources → Add data source → InfluxDB:&lt;br /&gt;
&lt;br /&gt;
| 설정 | 값 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| Name | `IPT-SNMP` |&lt;br /&gt;
| Query language | Flux |&lt;br /&gt;
| URL | `http://127.0.0.1:8086` |&lt;br /&gt;
| Organization | `network` |&lt;br /&gt;
| Token | grafana-read 토큰 |&lt;br /&gt;
| Default Bucket | `snmp_raw` |&lt;br /&gt;
| Min time interval | `1s` (실제 수집 간격은 패널별로 반영) |&lt;br /&gt;
&lt;br /&gt;
Save &amp;amp; test 성공 후 Explore에서 measurement를 조회한다. [Grafana 공식 연결 설정](https://grafana.com/docs/grafana/latest/datasources/influxdb/configure/).&lt;br /&gt;
&lt;br /&gt;
### 8.3 필드와 태그 확인&lt;br /&gt;
&lt;br /&gt;
```flux&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: -10m)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &amp;quot;switch_port_fast&amp;quot;)&lt;br /&gt;
  |&amp;gt; limit(n: 5)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
실제 `source` 태그를 확인해 아래 `&amp;lt;SOURCE_TAG_VALUE&amp;gt;`에 넣는다. 일반적으로 장비 IP지만 출력으로 확인한다. 먼저 변수 없이 한 대·한 포트의 표시를 완성한다.&lt;br /&gt;
&lt;br /&gt;
### 8.4 In/Out bps&lt;br /&gt;
&lt;br /&gt;
패널: Time series / Unit: bits/sec / 결측 구간 연결 안 함 / 시간대 Asia/Seoul / 범위 최근 15분 / refresh 5s.&lt;br /&gt;
&lt;br /&gt;
```flux&lt;br /&gt;
from(bucket: &amp;quot;snmp_raw&amp;quot;)&lt;br /&gt;
  |&amp;gt; range(start: v.timeRangeStart, stop: v.timeRangeStop)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &amp;quot;switch_port_fast&amp;quot;)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r.source == &amp;quot;&amp;lt;SOURCE_TAG_VALUE&amp;gt;&amp;quot; and r.index == &amp;quot;&amp;lt;IFINDEX&amp;gt;&amp;quot;)&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == &amp;quot;in_octets&amp;quot; or r._field == &amp;quot;out_octets&amp;quot;)&lt;br /&gt;
  |&amp;gt; derivative(unit: 1s, nonNegative: true)&lt;br /&gt;
  |&amp;gt; map(fn: (r) =&amp;gt; ({r with _value: r._value * 8.0}))&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`derivative`로 실제 timestamp 차이를 사용해 초당 값으로 바꾼 뒤 8배한다. 고정 간격 5로 나누지 않는다. 장기간 표시에서 집계한다면 **rate 계산 후** `aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)`를 추가하고 ‘구간 내 최대 수집간격 평균’으로 표시한다. 누적 카운터를 먼저 평균내지 않는다.&lt;br /&gt;
&lt;br /&gt;
`nonNegative`만으로 모든 리셋을 판별할 수 없다. discontinuity 변경·sysUpTime 감소·링크 변경 구간은 무효 처리한다. 첫 점은 이전 값이 없어 표시되지 않는다. 결측은 0으로 채우지 않으며 긴 결측을 가로지르는 rate는 장애 증거에 사용하지 않는다. [Flux derivative](https://docs.influxdata.com/flux/v0/stdlib/universe/derivative/).&lt;br /&gt;
&lt;br /&gt;
### 8.5 PPS、Broadcast、Discard&lt;br /&gt;
&lt;br /&gt;
위 쿼리의 `_field` 조건을 다음으로 바꾸고 8배하는 `map` 행은 제거한다. 각 계열을 별도로 표시한다.&lt;br /&gt;
&lt;br /&gt;
```flux&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == &amp;quot;in_ucast&amp;quot; or r._field == &amp;quot;in_mcast&amp;quot; or r._field == &amp;quot;in_bcast&amp;quot;)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
합계 In PPS는 세 계열의 합이다. Out PPS는 대응하는 `out_` 세 계열로 만든다. Broadcast/Multicast 전용 패널도 구성해 정상 시 기준과 비교한다.&lt;br /&gt;
&lt;br /&gt;
```flux&lt;br /&gt;
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == &amp;quot;in_discards&amp;quot; or r._field == &amp;quot;out_discards&amp;quot;)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
위 값은 폐기 packets/sec다. 누적값이 아니라 증가율을 표시한다. 일반 수집 measurement의 `in_errors/out_errors`도 같은 방식으로 별도 패널을 만든다.&lt;br /&gt;
&lt;br /&gt;
### 8.6 상태·손실·대시보드&lt;br /&gt;
&lt;br /&gt;
- `oper_status`는 rate로 바꾸지 않는다. 1=up, 2=down 등으로 state timeline에 표시한다.&lt;br /&gt;
- `speed_mbps`는 Mbps 단위다. In 사용률=In bps÷(speed_mbps×1,000,000)×100. Out은 따로 계산하며 전이중의 In/Out을 합쳐 100%로 판정하지 않는다.&lt;br /&gt;
- `ping`의 `average_response_ms`, `percent_packet_loss`는 이미 계산된 값이므로 derivative 불필요. 1패킷/5초 설정에서는 각 관측의 손실이 0% 또는 100%다.&lt;br /&gt;
- LAG 논리 포트와 물리 멤버를 별도로 표시하고 합산 중복 집계를 피한다.&lt;br /&gt;
- 초기 패널: 중요 포트 bps, Broadcast/Multicast PPS, Discard/Error 증가율, operStatus, Ping 지연·손실, VM CPU·메모리·디스크, Telegraf 오류·결측.&lt;br /&gt;
- 스위치 CPU·PoE는 모델별 OID 확인 후 추가한다. 미설정을 0/정상으로 표시하지 않는다.&lt;br /&gt;
&lt;br /&gt;
대시보드를 저장하고 JSON으로 내보낸다. 이번 Syslog 구성은 파일 조회용으로 Grafana에서 로그를 검색할 수는 없다. 별도 로그 검색 UI를 추가하기 전에는 §11의 CLI로 대조한다.&lt;br /&gt;
&lt;br /&gt;
## 9. Zyxel Syslog 수신&lt;br /&gt;
&lt;br /&gt;
### 9.1 포트 중복 확인&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
grep -RniE &#039;imudp|imtcp|port=&amp;quot;514&amp;quot;|UDPServerRun&#039; /etc/rsyslog.conf /etc/rsyslog.d&lt;br /&gt;
ss -lunp | grep &#039;:514&#039;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
기존 입력이 있으면 module/input을 중복 생성하지 말고 기존 설정에 통합한다. 아래는 미구성 신규 VM용이다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
install -d -m 750 /var/log/zyxel&lt;br /&gt;
restorecon -RF /var/log/zyxel&lt;br /&gt;
vi /etc/rsyslog.d/30-zyxel-remote.conf&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
```conf&lt;br /&gt;
module(load=&amp;quot;imudp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
template(name=&amp;quot;ZyxelRemotePath&amp;quot; type=&amp;quot;string&amp;quot;&lt;br /&gt;
  string=&amp;quot;/var/log/zyxel/%fromhost-ip:::secpath-replace%/events.log&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
template(name=&amp;quot;ZyxelRemoteLine&amp;quot; type=&amp;quot;string&amp;quot;&lt;br /&gt;
  string=&amp;quot;received=%timegenerated:::date-rfc3339% reported=%timereported:::date-rfc3339% src=%fromhost-ip% host=%hostname% facility=%syslogfacility-text% severity=%syslogseverity-text% tag=%syslogtag% msg=%msg%\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ruleset(name=&amp;quot;ZyxelRemoteRules&amp;quot;) {&lt;br /&gt;
  action(type=&amp;quot;omfile&amp;quot;&lt;br /&gt;
    dynaFile=&amp;quot;ZyxelRemotePath&amp;quot;&lt;br /&gt;
    template=&amp;quot;ZyxelRemoteLine&amp;quot;&lt;br /&gt;
    createDirs=&amp;quot;on&amp;quot;&lt;br /&gt;
    dirCreateMode=&amp;quot;0750&amp;quot;&lt;br /&gt;
    fileCreateMode=&amp;quot;0640&amp;quot;)&lt;br /&gt;
  stop&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
input(type=&amp;quot;imudp&amp;quot; address=&amp;quot;&amp;lt;COLLECTOR_IP&amp;gt;&amp;quot; port=&amp;quot;514&amp;quot;&lt;br /&gt;
  ruleset=&amp;quot;ZyxelRemoteRules&amp;quot;)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
송신 IP별 파일에 수신 시각과 장비 보고 시각을 함께 기록한다. 장비 Syslog에 시간대 정보가 없으면 완전한 보정은 불가능하므로 실장비 테스트로 대조한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
rsyslogd -N1&lt;br /&gt;
systemctl enable --now rsyslog&lt;br /&gt;
systemctl restart rsyslog&lt;br /&gt;
ss -lunp | grep &#039;:514&#039;&lt;br /&gt;
journalctl -u rsyslog -n 100 --no-pager&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
재시작 중 짧은 수신 공백에 주의한다. 실패하면 변경 전 파일을 복원하고 `rsyslogd -N1` 검사 후 재시작한다. SELinux 거부는 다음으로 확인하며 비활성화하지 않는다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
ausearch -m AVC -ts recent&lt;br /&gt;
ls -Zd /var/log/zyxel&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
근거: [imudp](https://docs.rsyslog.com/doc/configuration/modules/imudp.html), [omfile](https://docs.rsyslog.com/doc/configuration/modules/omfile.html). 참조 문서는 최신판을 포함하므로 설치된 rsyslog의 구문 검사를 반드시 수행한다.&lt;br /&gt;
&lt;br /&gt;
### 9.2 로그 회전과 보존&lt;br /&gt;
&lt;br /&gt;
`/etc/logrotate.d/zyxel-remote`:&lt;br /&gt;
&lt;br /&gt;
```conf&lt;br /&gt;
/var/log/zyxel/*/events.log {&lt;br /&gt;
    daily&lt;br /&gt;
    rotate 30&lt;br /&gt;
    missingok&lt;br /&gt;
    notifempty&lt;br /&gt;
    compress&lt;br /&gt;
    delaycompress&lt;br /&gt;
    create 0640 root root&lt;br /&gt;
    sharedscripts&lt;br /&gt;
    postrotate&lt;br /&gt;
        /usr/bin/systemctl kill -s HUP --kill-who=main rsyslog.service &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
    endscript&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
보존은 ‘30회전분’이며 매일 회전하면 약 30일이다. 정확히 30일이 지난 순간 삭제되는 방식은 아니다. 오래된 파일 삭제를 수반하므로 장애 로그는 별도 보관한다. 신규 VM의 rsyslog root 실행 기준이며 privilege drop을 사용한다면 소유자를 맞춘다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
logrotate -d /etc/logrotate.d/zyxel-remote&lt;br /&gt;
systemctl status logrotate.timer --no-pager&lt;br /&gt;
systemctl list-timers --all | grep logrotate&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
일일 실행이 비활성이라면 패키지 timer/cron을 확인해 활성화한다. 일일 회전만으로 하루 동안의 폭증에 따른 디스크 고갈은 막을 수 없다. 디스크 80% 예고 감시와 증가량 점검을 수행한다. 근거 없이 중요 로그를 제한해 버리지 않는다.&lt;br /&gt;
&lt;br /&gt;
### 9.3 Zyxel 측 송신&lt;br /&gt;
&lt;br /&gt;
Syslog 목적지 `&amp;lt;COLLECTOR_IP&amp;gt;` / UDP514. Informational을 포함하는 범위로 시작하고 상시 Debug는 피한다. Link Up/Down, STP 변경, 루프 탐지, PoE 이상·전력 부족, 재시작 등을 모델 지원 범위에서 활성화한다. 포트별 이벤트 설정이 필요하면 함께 적용한다.&lt;br /&gt;
&lt;br /&gt;
## 10. firewalld와 접속 확인&lt;br /&gt;
&lt;br /&gt;
기본 웹 접속은 SSH 터널만 사용한다. 3000/8086과 서버 수신 UDP161/162를 열지 않는다. SNMP는 서버에서 스위치 UDP161로 조회하고 응답을 받는다. 외향 제한이 있는 경우에만 기존 정책에 필요 허용을 추가한다.&lt;br /&gt;
&lt;br /&gt;
### 10.1 Syslog만 허용&lt;br /&gt;
&lt;br /&gt;
영향: 지정 송신원에서 UDP514 수신을 추가한다. zone 변경·SSH 규칙 삭제·광범위 허용은 하지 않는다. 먼저 확인:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
firewall-cmd --get-active-zones&lt;br /&gt;
firewall-cmd --zone=&amp;lt;FW_ZONE&amp;gt; --list-all&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
실제 값으로 설정한다. 송신자를 엄격히 제한하려면 장비별 /32 규칙을 사용한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
MON_ZONE=&#039;&amp;lt;FW_ZONE&amp;gt;&#039;&lt;br /&gt;
MON_SYSLOG_RULE=&#039;rule family=&amp;quot;ipv4&amp;quot; source address=&amp;quot;&amp;lt;SWITCH_SOURCE_CIDR&amp;gt;&amp;quot; port port=&amp;quot;514&amp;quot; protocol=&amp;quot;udp&amp;quot; accept&#039;&lt;br /&gt;
firewall-cmd --zone=&amp;quot;$MON_ZONE&amp;quot; --add-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot; --timeout=600&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
10분 안에 장비 송신과 SSH 접속 유지를 확인한다. 임시 규칙은 자동 만료된다. 승인 후 동일 규칙만 영구 및 runtime에 적용:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
firewall-cmd --permanent --zone=&amp;quot;$MON_ZONE&amp;quot; --add-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
firewall-cmd --zone=&amp;quot;$MON_ZONE&amp;quot; --remove-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
firewall-cmd --zone=&amp;quot;$MON_ZONE&amp;quot; --add-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
이미 만료됐다면 remove의 not enabled를 확인하고 다음으로 진행한다. 전체 runtime 저장이나 reload로 다른 작업 변경을 포함하지 않는다.&lt;br /&gt;
&lt;br /&gt;
롤백 — 이번 작업에서 새로 추가한 규칙만 제거:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
firewall-cmd --zone=&amp;quot;$MON_ZONE&amp;quot; --remove-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
firewall-cmd --permanent --zone=&amp;quot;$MON_ZONE&amp;quot; --remove-rich-rule=&amp;quot;$MON_SYSLOG_RULE&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 10.2 실장비 도달 확인&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
timeout 20 tcpdump -ni any -nn &#039;udp dst port 514&#039;&lt;br /&gt;
tail -n 50 /var/log/zyxel/&amp;lt;SWITCH_SYSLOG_SOURCE_IP&amp;gt;/events.log&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
VM 자신의 logger는 파일 저장 검사용이며 스위치에서의 경로·ACL 검증을 대신하지 못한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
logger --udp --server &amp;lt;COLLECTOR_IP&amp;gt; --port 514 --tag IPT_TEST &#039;collector receiver test&#039;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## 11. 시험 운영·장애 확인&lt;br /&gt;
&lt;br /&gt;
### 11.1 초기 24시간&lt;br /&gt;
&lt;br /&gt;
1. 한 대·중요 포트 1~2개로 시작한다.&lt;br /&gt;
2. 실제 SNMP 카운터와 InfluxDB 값 증가를 대조한다.&lt;br /&gt;
3. bps/PPS 변동과 operStatus 표시를 확인한다.&lt;br /&gt;
4. 정상 발신 테스트의 시각·단말 IP·Call-ID를 기록한다. 본망에서 부하용 iperf나 루프를 만들지 않는다.&lt;br /&gt;
5. 별도 수집 중인 콜서버 SIP와 전후 2분의 네트워크 기록을 비교한다.&lt;br /&gt;
6. 5060 외 SIP/TLS와 RTP는 해당 캡처 범위 밖임을 기록한다.&lt;br /&gt;
7. 수집시간·스위치 CPU·VM CPU/IO·결측·로그 증가량이 허용 범위면 대상 장비를 늘린다.&lt;br /&gt;
8. 중요 포트 1초화는 카운터 갱신을 실측한 후 진행한다.&lt;br /&gt;
&lt;br /&gt;
### 11.2 운영 확인 명령&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
systemctl is-active influxdb telegraf grafana-server rsyslog chronyd&lt;br /&gt;
journalctl -u telegraf --since &#039;-10 min&#039; --no-pager&lt;br /&gt;
chronyc tracking&lt;br /&gt;
df -h&lt;br /&gt;
du -sh /var/log/zyxel&lt;br /&gt;
vmstat 1 5&lt;br /&gt;
iostat -xz 1 5&lt;br /&gt;
nstat -az | grep -E &#039;Udp(InErrors|RcvbufErrors|InDatagrams)&#039;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
UDP 통계는 누적값이므로 시간 차분으로 본다. VM/호스트의 수신 드롭을 스위치 송신 중단으로 오해하지 않는다. `inputs.internal`의 수집시간·오류와 DB 출력 drop도 대시보드에 추가한다.&lt;br /&gt;
&lt;br /&gt;
### 11.3 장애 기록 양식&lt;br /&gt;
&lt;br /&gt;
| 항목 | 기록 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| 장애 일시·시간대 | 초 단위, KST |&lt;br /&gt;
| 발신·착신 | 내선, 전화기 IP, 등록 상태 |&lt;br /&gt;
| 연결 위치 | L2 이름, 포트, ifIndex, Voice VLAN |&lt;br /&gt;
| PC 상태 | 동시 정상·불통·미확인 |&lt;br /&gt;
| SIP | INVITE 도착, 응답 코드, Call-ID, 재전송 |&lt;br /&gt;
| SNMP | In/Out bps、PPS、Broadcast、Discard、operStatus |&lt;br /&gt;
| 로그 | Link, STP, PoE, 재부팅 등 |&lt;br /&gt;
| 수집 상태 | NTP, 결측, VM 수신 drop, tcpdump drop |&lt;br /&gt;
&lt;br /&gt;
로그 검색:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
grep -Ei &#039;link|stp|loop|poe|power|reboot|restart|topology&#039; \&lt;br /&gt;
    /var/log/zyxel/&amp;lt;SWITCH_SYSLOG_SOURCE_IP&amp;gt;/events.log&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
메시지의 수신·보고 시각을 장애 전후와 비교한다. 키워드가 없다는 이유만으로 이벤트가 없다고 판단하지 않는다. 장비 문구는 모델에 따라 다르다.&lt;br /&gt;
&lt;br /&gt;
### 11.4 초기 알림 제안&lt;br /&gt;
&lt;br /&gt;
아래는 운영 후 Grafana 관리형 알림으로 구성할 제안값이며 자동 생성된 설정은 아니다.&lt;br /&gt;
&lt;br /&gt;
- 중요 포트 한 방향 사용률 80% 이상이 30초 지속: 혼잡 예고이며 원인 확정은 아니다.&lt;br /&gt;
- 중요 포트 Discard 증가: 조사 이벤트. QoS·버퍼·정책 확인.&lt;br /&gt;
- Ping 3회 연속 손실: VM에서의 도달성 이상이며 SIP 장애 확정은 아니다.&lt;br /&gt;
- 고주기 데이터 15초 이상 결측: No Data를 정상으로 처리하지 않는다.&lt;br /&gt;
- 디스크 사용량 80% 이상: 보존 공간 경고.&lt;br /&gt;
- Broadcast PPS는 24시간 정상값을 확보한 뒤 임계값을 결정한다. 모든 현장에 공통 고정값을 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
전화 연결 실패와 높은 사용률·Discard 증가가 동반되면 혼잡이 유력하다. INVITE 불착만으로 단말 미송신과 경로 손실은 구분할 수 없다. 등록·PoE·Voice VLAN 상태와 함께 판단한다.&lt;br /&gt;
&lt;br /&gt;
## 12. sFlow 추가 — 조건부 절차&lt;br /&gt;
&lt;br /&gt;
### 12.1 착수 조건&lt;br /&gt;
&lt;br /&gt;
**Zyxel이라는 제조사명만으로 sFlow 지원을 확정할 수 없다.** 정확한 모델·펌웨어의 공식 매뉴얼에서 exporter, 대상 인터페이스, sampling 범위, source/agent IP 설정을 확인한다. 확인 전 컨테이너 전체를 기동할 필요는 없다.&lt;br /&gt;
&lt;br /&gt;
| 장비 설정 | 계획 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| Collector | `&amp;lt;COLLECTOR_IP&amp;gt;` |&lt;br /&gt;
| UDP port | 6343, 수집기와 일치 |&lt;br /&gt;
| Agent / source | SNMP로 도달 가능한 고정 관리 IP |&lt;br /&gt;
| Sampling | 지원 범위에서 1:1024 전후를 시험 시작값으로 검토 |&lt;br /&gt;
| Counter polling | 10~30초 중 장비 지원값 |&lt;br /&gt;
| 관측 대상 | 중요 L2/L3 포트, 가능하면 ingress 중심 |&lt;br /&gt;
&lt;br /&gt;
패킷 샘플링과 counter polling은 별개다. sFlow는 SIP 전체 패킷 캡처를 대체하지 않는다. IP별 사용률은 추정이고 L3만으로 같은 L2 내부 트래픽을 놓칠 수 있다. 여러 스위치·입출력의 동일 패킷을 중복 합산하지 않는다.&lt;br /&gt;
&lt;br /&gt;
### 12.2 Akvorado 도입 방안&lt;br /&gt;
&lt;br /&gt;
[Akvorado 공식 프로젝트](https://github.com/akvorado/akvorado)는 NetFlow/IPFIX/sFlow, SNMP 메타데이터 보강, ClickHouse 저장과 웹 분석을 제공한다. 공식 Docker Compose는 본문의 RPM 운영과 별개다. **이전 설명의 Podman Compose 호환을 전제하지 않는다.** Docker와 Podman 호환 패키지도 혼용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
공식 `.env`는 여러 `docker/docker-compose-*.yml`을 조합한다. main은 개발 구성을 포함하므로 그대로 운영 배포하지 않는다. [공식 구성 디렉터리](https://github.com/akvorado/akvorado/tree/main/docker).&lt;br /&gt;
&lt;br /&gt;
지원 확인 후 KVM 스냅샷과 방화벽 백업을 확보하고 Docker Engine의 RHEL/CentOS계 설치 방법을 검토한다. Rocky가 Docker의 공식 지원 대상과 동일하다고 가정하지 않는다. [Docker CentOS 절차](https://docs.docker.com/engine/install/centos/).&lt;br /&gt;
&lt;br /&gt;
신규 전용 VM이며 패키지 충돌이 없다고 확인된 경우의 준비 명령:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
rpm -q podman-docker docker-ce docker-ce-cli containerd.io&lt;br /&gt;
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
dnf list --showduplicates docker-ce docker-compose-plugin&lt;br /&gt;
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
충돌 패키지를 자동 삭제하지 않는다. Docker는 전송·패킷 필터 규칙을 변경할 수 있으므로 KVM 게스트에서만 적용하고 관리 경로를 검증한다. KVM 호스트에서는 실행하지 않는다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
systemctl enable --now docker&lt;br /&gt;
docker version&lt;br /&gt;
docker compose version&lt;br /&gt;
dnf install -y git&lt;br /&gt;
git clone https://github.com/akvorado/akvorado.git /opt/akvorado&lt;br /&gt;
cd /opt/akvorado&lt;br /&gt;
git tag --sort=-version:refname | head -20&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
기존 파일이 있는 `/opt/akvorado`에는 clone하지 않는다. 공식 안정 릴리스의 태그를 선택하고 해당 Changelog·문서를 읽는다. 본문에서 태그는 미확정이다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
git switch --detach &amp;lt;VERIFIED_STABLE_TAG&amp;gt;&lt;br /&gt;
git rev-parse HEAD&lt;br /&gt;
docker compose config --services&lt;br /&gt;
docker compose config --images&lt;br /&gt;
docker compose config --quiet&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`docker compose config --quiet`는 Compose 구문만 검사한다. 앱 설정 검증과 다르다. 아래 환경값을 **선택한 릴리스의 schema로 구성한 후** 기동한다. 추정한 키 이름으로 작성한 YAML은 제공하지 않는다.&lt;br /&gt;
&lt;br /&gt;
| 필수 설정 | 확인 사항 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| sFlow 입력 | UDP6343 수신·바인딩 |&lt;br /&gt;
| SNMP metadata | agent/source 주소, 장비별 인증값, 포트명 보강 |&lt;br /&gt;
| 내부 네트워크 | Voice/Data CIDR과 사설 IP 분류 |&lt;br /&gt;
| 불필요 서비스 | demo exporter 비활성, Grafana 중복 배치 금지, GeoIP 의존성 확인 |&lt;br /&gt;
| 인증·공개 | 웹은 loopback+SSH 또는 인증 TLS, DB/Kafka는 외부 공개 금지 |&lt;br /&gt;
| 보존 | 원시·집계 데이터 기간, ClickHouse TTL, 용량 계획 |&lt;br /&gt;
| 영속화·SELinux | named volume 또는 전용 bind mount 라벨, 공유 OS 경로에 `:Z` 사용 금지 |&lt;br /&gt;
| 재시작 | 서비스 restart policy, Docker 자동 기동 |&lt;br /&gt;
&lt;br /&gt;
**Docker 공개 포트를 firewalld INPUT 규칙만으로 제한할 수 있다고 가정하지 않는다.** 실제 백엔드의 전달 규칙/DOCKER-USER 상당 경로, 상위 ACL과 관리 IP 바인딩을 확인하고 비허가 단말에서 차단되는지 시험한다. 관리 IP 바인딩은 송신원 제한이 아니다. §10 rich rule만으로 Docker의 UDP6343 제한을 완료 처리하지 않는다.&lt;br /&gt;
&lt;br /&gt;
위 조건을 확정한 뒤 실행할 기동·검증 명령:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
cd /opt/akvorado&lt;br /&gt;
docker compose pull&lt;br /&gt;
docker compose up -d&lt;br /&gt;
docker compose ps&lt;br /&gt;
docker compose logs --tail=100&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
태그·설정이 미정인 상태에서 일괄 실행하는 명령이 아니다. 같은 릴리스의 앱 설정 검사 방법을 따르고 healthy 표시뿐 아니라 실제 데이터 표시도 확인한다.&lt;br /&gt;
&lt;br /&gt;
### 12.3 수신·분석 합격 기준&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
timeout 20 tcpdump -ni any -nn &#039;udp dst port 6343&#039;&lt;br /&gt;
ss -lunp | grep &#039;:6343&#039;&lt;br /&gt;
nstat -az | grep -E &#039;Udp(InErrors|RcvbufErrors|InDatagrams)&#039;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
Docker의 포트 구현에 따라 호스트 `ss`에 예상 소켓이 안 보일 수 있다. 실제 Compose 포트 매핑과 수신 메트릭을 함께 확인한다.&lt;br /&gt;
&lt;br /&gt;
합격: 스위치 source에서 패킷 도착, 수집·디코드 카운터 증가, 오류 급증 없음, 웹에서 exporter·입력 포트·단말 IP·시간대 표시, 포트 번호의 실제 이름 매핑. tcpdump 도착만으로 성공 판정하지 않는다.&lt;br /&gt;
&lt;br /&gt;
미지원 장비는 SNMP/Syslog를 유지하고 필요한 사건만 승인된 포트 미러링으로 분석한다. 미러링은 별도 vNIC·물리 연결·대역폭 검토가 필요하며 현재 관리 NIC를 임의로 미러 수신 포트로 바꾸지 않는다.&lt;br /&gt;
&lt;br /&gt;
## 13. 백업·롤백&lt;br /&gt;
&lt;br /&gt;
### 13.1 일반 백업&lt;br /&gt;
&lt;br /&gt;
Influx CLI 관리자 인증으로 여유 공간이 있는 새 디렉터리에 저장한다. Grafana 읽기 전용·Telegraf 쓰기 전용 토큰으로는 백업할 수 없다. [InfluxDB backup](https://docs.influxdata.com/influxdb/v2/reference/cli/influx/backup/).&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
umask 077&lt;br /&gt;
MON_ARCHIVE=&amp;quot;/root/ipt-monitor-save-$(date +%Y%m%d-%H%M%S)&amp;quot;&lt;br /&gt;
install -d -m 700 &amp;quot;$MON_ARCHIVE&amp;quot;&lt;br /&gt;
influx backup &amp;quot;$MON_ARCHIVE/influxdb&amp;quot;&lt;br /&gt;
tar -czf &amp;quot;$MON_ARCHIVE/configs.tar.gz&amp;quot; \&lt;br /&gt;
    /etc/telegraf /etc/grafana /etc/rsyslog.conf /etc/rsyslog.d \&lt;br /&gt;
    /etc/logrotate.d/zyxel-remote /etc/chrony.conf /etc/firewalld \&lt;br /&gt;
    /etc/systemd/system/telegraf.service.d \&lt;br /&gt;
    /etc/systemd/system/influxdb.service.d&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
백업에는 SNMP 비밀과 토큰이 포함된다. root 전용 권한을 유지하고 접근제어된 다른 매체에 암호화 복제한다. root 디스크에만 둔 것은 백업 완료로 간주하지 않는다.&lt;br /&gt;
&lt;br /&gt;
Grafana 기본 SQLite의 실행 중 파일만 단순 복사하지 않는다. 화면 중단이 허용되는 시간에 다음을 수행한다:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
systemctl stop grafana-server&lt;br /&gt;
tar -czf &amp;quot;$MON_ARCHIVE/grafana-data.tar.gz&amp;quot; /var/lib/grafana&lt;br /&gt;
systemctl start grafana-server&lt;br /&gt;
curl -fsS http://127.0.0.1:3000/api/health&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
이 동안 Telegraf 수집은 계속된다. 외부 DB를 사용하는 Grafana는 별도 DB 정합 백업이 필요하다. 장애 구간 Syslog·콜서버 pcap도 보존한다. 기록 중인 파일은 변경될 수 있으므로 닫힌 파일이나 정합 스냅샷으로 증거를 확보한다.&lt;br /&gt;
&lt;br /&gt;
### 13.2 설정 변경 롤백&lt;br /&gt;
&lt;br /&gt;
- 고주기 SNMP 부하: `20-zyxel-fast.conf`의 interval을 5/10초로 복귀 후 검사·재시작. 긴급 시 `systemctl stop telegraf`를 수행하고 수집 중단을 기록한다.&lt;br /&gt;
- Telegraf 오류: 해당 설정의 변경 전 버전 복원 → 검사 → 재시작. DB는 삭제하지 않는다.&lt;br /&gt;
- 신규 Syslog 설정만 취소하려면 아래처럼 비활성화한다. 수신 중단을 알리고 기존 파일을 수정했던 경우에는 변경 전 버전으로 복원한다.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
mv /etc/rsyslog.d/30-zyxel-remote.conf /etc/rsyslog.d/30-zyxel-remote.conf.disabled&lt;br /&gt;
rsyslogd -N1&lt;br /&gt;
systemctl restart rsyslog&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- firewalld는 §10에서 추가한 정확히 일치하는 규칙만 제거한다.&lt;br /&gt;
- Akvorado 중지는 `/opt/akvorado`에서 `docker compose stop`. `down -v`, volume 삭제, ClickHouse DROP은 하지 않는다.&lt;br /&gt;
- 장비의 sFlow는 추가한 export 설정만 되돌린다. Voice VLAN·PoE·STP·QoS는 일괄 초기화하지 않는다.&lt;br /&gt;
&lt;br /&gt;
### 13.3 데이터 복원·업그레이드&lt;br /&gt;
&lt;br /&gt;
운영 InfluxDB에 full restore를 바로 수행하면 덮어쓰기 위험이 있다. 격리된 새 VM에 같은 버전으로 공식 restore 절차를 시험한다. Grafana는 중지 후 동일 구성의 데이터·설정을 복원하고 소유자/SELinux 라벨을 확인해 기동한다. 새 운영 데이터와의 통합은 별도 계획한다.&lt;br /&gt;
&lt;br /&gt;
업그레이드: RPM/이미지 버전 기록 → 백업 → 시험 VM 검증 → 운영 적용. 메이저 변경·DB schema 변경 후 바이너리만 내려서 롤백하지 않는다.&lt;br /&gt;
&lt;br /&gt;
## 14. 장애 확인표·인수 체크리스트&lt;br /&gt;
&lt;br /&gt;
| 이상 | 첫 확인 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| SNMP timeout | 같은 조건 CLI, 관리 경로·ACL·CPU·인증·암호화 |&lt;br /&gt;
| No Such Object/Instance | view·모델 지원·ifIndex·인터페이스 선택 |&lt;br /&gt;
| Telegraf 값은 있는데 Grafana가 비어 있음 | DB 쓰기 토큰·bucket·measurement/tag·UTC/KST·시간 범위 |&lt;br /&gt;
| 계단형 그래프·이상 피크 | 카운터 갱신 주기·리셋·결측·중복 수집 |&lt;br /&gt;
| 재부팅 후 다른 포트 표시 | ifIndex 재조회, 고정 OID·태그 수정 |&lt;br /&gt;
| Syslog는 도착하지만 파일 없음 | ruleset·구문·권한·SELinux·실제 송신 IP |&lt;br /&gt;
| sFlow 패킷만 도착 | 포트 매핑·디코딩·metadata·DB·시간·필터 |&lt;br /&gt;
| PoE/CPU 없음 | 본 구성 미포함. 모델 전용 MIB 필요 |&lt;br /&gt;
| 전화 장애 때 전체 데이터 결측 | VM/KVM 부하·관리 경로·NTP·수신 drop |&lt;br /&gt;
&lt;br /&gt;
### 초기 구성 완료 조건&lt;br /&gt;
&lt;br /&gt;
- [ ] OS/RPM 버전과 IP·포트 대응표를 저장했다.&lt;br /&gt;
- [ ] SNMPv3 읽기 전용으로 대상 조회 및 ifIndex를 확인했다.&lt;br /&gt;
- [ ] 실데이터의 bytes·PPS·Broadcast·Discard가 확인된다.&lt;br /&gt;
- [ ] Grafana가 누적값 대신 rate를 표시하고 상태는 원래 값으로 표시한다.&lt;br /&gt;
- [ ] DB 저장·화면 표시와 재부팅 후 수집 지속을 확인했다.&lt;br /&gt;
- [ ] 실장비 Syslog 저장과 logrotate dry-run을 확인했다.&lt;br /&gt;
- [ ] 콜서버·스위치와 NTP가 일치한다.&lt;br /&gt;
- [ ] DB/API 비공개, SSH·송신원 허용을 확인했다.&lt;br /&gt;
- [ ] 결측을 0/정상으로 표시하지 않는다.&lt;br /&gt;
- [ ] sFlow·PoE·CPU 미확인 항목을 완료 처리하지 않는다.&lt;br /&gt;
- [ ] 보존 만료 전 장애 증거 보관과 복원 방침을 정했다.&lt;br /&gt;
&lt;br /&gt;
## 15. 공식 자료·대상 버전&lt;br /&gt;
&lt;br /&gt;
공식 자료 확인일: 2026-09-10. 지속 갱신 문서는 고정 게시일이 없으며 실제 RPM 버전을 §4 출력으로 기록한다.&lt;br /&gt;
&lt;br /&gt;
| 대상 | 공식 자료 |&lt;br /&gt;
|---|---|&lt;br /&gt;
| Telegraf 1.x | [설치](https://docs.influxdata.com/telegraf/v1/install/) / [설정](https://docs.influxdata.com/telegraf/v1/configuration/) / [SNMP](https://docs.influxdata.com/telegraf/v1/input-plugins/snmp/) / [Ping](https://docs.influxdata.com/telegraf/v1/input-plugins/ping/) |&lt;br /&gt;
| InfluxDB OSS 2.x | [RPM 설치](https://docs.influxdata.com/influxdb/v2/install/?t=Linux) / [backup](https://docs.influxdata.com/influxdb/v2/reference/cli/influx/backup/) |&lt;br /&gt;
| Flux | [derivative](https://docs.influxdata.com/flux/v0/stdlib/universe/derivative/) |&lt;br /&gt;
| Grafana OSS | [RPM 설치](https://grafana.com/docs/grafana/latest/setup-grafana/installation/redhat-rhel-fedora/) / [InfluxDB 연결](https://grafana.com/docs/grafana/latest/datasources/influxdb/configure/) |&lt;br /&gt;
| Net-SNMP | [snmp.conf](https://www.net-snmp.org/docs/man/snmp.conf.html) |&lt;br /&gt;
| IF-MIB | [RFC 2863, 2000-06](https://www.rfc-editor.org/rfc/rfc2863.html) |&lt;br /&gt;
| rsyslog 8.x | [imudp](https://docs.rsyslog.com/doc/configuration/modules/imudp.html) / [omfile](https://docs.rsyslog.com/doc/configuration/modules/omfile.html) |&lt;br /&gt;
| Akvorado | [공식 프로젝트](https://github.com/akvorado/akvorado) / [Compose](https://github.com/akvorado/akvorado/tree/main/docker) |&lt;br /&gt;
| Docker Engine | [CentOS 설치 참고](https://docs.docker.com/engine/install/centos/) |&lt;br /&gt;
&lt;br /&gt;
추가로 필요한 정보: Zyxel L3/L2 모델·펌웨어·대수·관리 IP/Voice VLAN 구조. 확인 후 장비별 SNMPv3/Syslog/sFlow 명령과 CPU·PoE·큐 OID를 확정할 수 있다.&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=ES-3128_%EC%84%A4%EC%A0%95%EA%B0%80%EC%9D%B4%EB%93%9C&amp;diff=116</id>
		<title>ES-3128 설정가이드</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=ES-3128_%EC%84%A4%EC%A0%95%EA%B0%80%EC%9D%B4%EB%93%9C&amp;diff=116"/>
		<updated>2026-08-05T14:23:26Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: 새 문서: {{DISPLAYTITLE:iPECS ES-3128G/GP L2 스위치 실무 운영 가이드}} __TOC__  = 문서 개요 =  본 문서는 &amp;#039;&amp;#039;&amp;#039;iPECS ES-3128G/P 교육교재(2016-11-08)&amp;#039;&amp;#039;&amp;#039;를 바탕으로 현장 설치, 설정, 점검 및 장애 대응에 필요한 내용을 작업 순서대로 재구성한 실무 가이드이다.  {| class=&amp;quot;wikitable&amp;quot; ! 항목 !! 내용 |- | 대상 장비 || iPECS ES-3128G, ES-3128GP |- | 장비 역할 || 24포트 Gigabit Ethernet L2 액세스 스위치 |- | 업링크 ||...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iPECS ES-3128G/GP L2 스위치 실무 운영 가이드}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= 문서 개요 =&lt;br /&gt;
&lt;br /&gt;
본 문서는 &#039;&#039;&#039;iPECS ES-3128G/P 교육교재(2016-11-08)&#039;&#039;&#039;를 바탕으로 현장 설치, 설정, 점검 및 장애 대응에 필요한 내용을 작업 순서대로 재구성한 실무 가이드이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 내용&lt;br /&gt;
|-&lt;br /&gt;
| 대상 장비 || iPECS ES-3128G, ES-3128GP&lt;br /&gt;
|-&lt;br /&gt;
| 장비 역할 || 24포트 Gigabit Ethernet L2 액세스 스위치&lt;br /&gt;
|-&lt;br /&gt;
| 업링크 || Gi0/25~Gi0/28, SFP 계열 모듈 사용&lt;br /&gt;
|-&lt;br /&gt;
| 기본 관리 IP || 192.168.1.10/24, VLAN 1&lt;br /&gt;
|-&lt;br /&gt;
| 기본 계정 || admin (최근 버젼은 root 입력시 새로운 계정과 패스워드 설정해야함)&lt;br /&gt;
|-&lt;br /&gt;
| 기본 비밀번호 || 1234qweR#&lt;br /&gt;
|-&lt;br /&gt;
| 권장 관리 방식 || 콘솔 또는 SSH, Telnet 비활성화&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;주의&#039;&#039;&#039;&lt;br /&gt;
* 본 교재는 2016년 자료이므로 실제 명령 지원 여부는 장비 모델과 OS 버전에 따라 다를 수 있다.&lt;br /&gt;
* ES-3128G와 ES-3128GP는 원격 접속 설정 문법이 다르다. 모델과 버전을 먼저 확인한다.&lt;br /&gt;
* 초기화, OS/부트로더 업그레이드, Boot-mode 복구는 서비스 중단 또는 부팅 불능 위험이 있다. 반드시 설정 백업, 콘솔 연결 및 복구용 TFTP 서버를 준비한 후 작업한다.&lt;br /&gt;
* 예제 IP, VLAN, 비밀번호, 커뮤니티 문자열은 현장 설계값으로 변경한다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[파일:ES-3128G_front_LED.png|가운데|900px|ES-3128G 전면 포트 및 LED]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 1. 작업 전 확인 및 백업 =&lt;br /&gt;
&lt;br /&gt;
== 1.1 현장 정보 기록 ==&lt;br /&gt;
&lt;br /&gt;
작업 전에 다음 값을 확정한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분 !! 기록 항목 !! 예시&lt;br /&gt;
|-&lt;br /&gt;
| 장비 || 모델, 시리얼, OS, Bootloader || ES-3128G / OS 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| 관리망 || IP, Prefix, Gateway, 관리 VLAN || 192.168.10.251/24, 192.168.10.254, VLAN 10&lt;br /&gt;
|-&lt;br /&gt;
| 업링크 || 포트, 상대 장비/포트, Native VLAN, 허용 VLAN || Gi0/25, CORE Gi1/0/24, VLAN 1, 10/20/110&lt;br /&gt;
|-&lt;br /&gt;
| 액세스 포트 || 포트별 단말, Data VLAN, Voice VLAN || Gi0/1, IP Phone+PC, 100/110&lt;br /&gt;
|-&lt;br /&gt;
| 운영 연동 || NTP, Syslog, SNMP 서버 || NTP 192.168.10.20&lt;br /&gt;
|-&lt;br /&gt;
| 이중화 || STP 모드/Root, LACP 그룹 || RSTP, Po1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 1.2 현재 상태 수집 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# Privileged 모드 진입&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
# 장비 모델, OS, Bootloader, 가동 시간 확인&lt;br /&gt;
show version&lt;br /&gt;
&lt;br /&gt;
# 현재 설정과 부팅 설정 확인&lt;br /&gt;
show running-config&lt;br /&gt;
show startup-config&lt;br /&gt;
&lt;br /&gt;
# Flash의 OS 및 Config 파일 확인&lt;br /&gt;
show flash:&lt;br /&gt;
&lt;br /&gt;
# 포트, VLAN, STP, LACP 상태 확인&lt;br /&gt;
show interface status&lt;br /&gt;
show vlan brief&lt;br /&gt;
show spanning-tree&lt;br /&gt;
show etherchannel summary&lt;br /&gt;
&lt;br /&gt;
# 장애 분석용 전체 정보 수집&lt;br /&gt;
show tech-support&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;확인 포인트&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;show version&amp;lt;/code&amp;gt;: 모델명이 ES-3128G인지 ES-3128GP인지, 현재 OS/Bootloader 버전, 부팅 이미지 파일명을 확인한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;show flash:&amp;lt;/code&amp;gt;: 부팅 이미지 표시와 설정 파일 표시, Flash 여유 공간을 확인한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;show interface status&amp;lt;/code&amp;gt;: 업링크 포트의 Link, Speed/Duplex, VLAN이 설계와 일치해야 한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;show tech-support&amp;lt;/code&amp;gt; 출력은 작업 전후 비교 및 제조사 장애 접수 자료로 보관한다.&lt;br /&gt;
&lt;br /&gt;
== 1.3 설정 저장 및 외부 백업 ==&lt;br /&gt;
&lt;br /&gt;
설정을 변경하기 전 현재 Running Config를 저장하고 TFTP 서버로 백업한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 현재 설정을 Startup Config에 저장&lt;br /&gt;
copy running-config startup-config&lt;br /&gt;
&lt;br /&gt;
# 또는 동일 기능의 단축 명령&lt;br /&gt;
write memory&lt;br /&gt;
&lt;br /&gt;
# Flash 내 Config 확인&lt;br /&gt;
show flash:&lt;br /&gt;
&lt;br /&gt;
# Config를 TFTP 서버로 백업&lt;br /&gt;
copy config: tftp&lt;br /&gt;
# IP address of remote host ? 192.168.1.100&lt;br /&gt;
# filename to write on tftp host? ES3128G_현장명_YYYYMMDD.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;검증&#039;&#039;&#039;&lt;br /&gt;
* 명령 완료 메시지와 전송 바이트 수를 확인한다.&lt;br /&gt;
* TFTP 서버의 파일 크기가 0Byte가 아닌지 확인한다.&lt;br /&gt;
* 백업 파일을 텍스트로 열어 hostname, 관리 IP, VLAN, 업링크 설정이 포함되어 있는지 점검한다.&lt;br /&gt;
&lt;br /&gt;
= 2. 접속 및 기본 보안 설정 =&lt;br /&gt;
&lt;br /&gt;
== 2.1 접속 방식 ==&lt;br /&gt;
&lt;br /&gt;
최초 설정 또는 원격 접속 장애 시 콘솔로 접속한다. 기본 상태는 Telnet 활성화, SSH 비활성화이며 로그인 5회 실패 시 약 5분 동안 로그인이 차단될 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 로그인 후 Privileged 모드 진입&lt;br /&gt;
ES-3128G login: admin&lt;br /&gt;
Password: 1234qweR#&lt;br /&gt;
ES-3128G&amp;gt; enable&lt;br /&gt;
&lt;br /&gt;
# Global Configuration 모드 진입&lt;br /&gt;
ES-3128G# configure terminal&lt;br /&gt;
ES-3128G(config)#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2.2 호스트명 및 관리자 계정 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 장비명 설정&lt;br /&gt;
configure terminal&lt;br /&gt;
hostname HQ-1F-SW01&lt;br /&gt;
&lt;br /&gt;
# 관리자 계정 생성 및 최고 권한 부여&lt;br /&gt;
username netadmin privilege 15 password 현장_강력한_비밀번호&lt;br /&gt;
&lt;br /&gt;
# Enable 비밀번호 설정&lt;br /&gt;
enable password 별도_Enable_비밀번호&lt;br /&gt;
&lt;br /&gt;
# 설정에 표시되는 비밀번호 암호화&lt;br /&gt;
service password-encryption&lt;br /&gt;
end&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
기본 계정과 기본 비밀번호를 운영 상태로 방치하지 않는다. 교재 기준 비밀번호에는 쉼표(&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;), 콜론(&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;), 달러 기호(&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;)를 사용할 수 없으며 최대 길이는 25자이다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2.3 SSH 활성화 및 Telnet 차단 ==&lt;br /&gt;
&lt;br /&gt;
=== ES-3128G ===&lt;br /&gt;
&lt;br /&gt;
관리 PC 대역을 SSH ACL에 먼저 허용한 다음 Telnet을 차단한다. ACL 적용 전에 현재 접속 IP가 허용 범위에 포함되는지 반드시 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# SSH 활성화&lt;br /&gt;
ip ssh&lt;br /&gt;
&lt;br /&gt;
# 관리망 192.168.10.0/24만 SSH 허용&lt;br /&gt;
access-list 22 permit 192.168.10.0 0.0.0.255&lt;br /&gt;
access-list 22 deny any&lt;br /&gt;
ip option ssh-acl access-group 22&lt;br /&gt;
&lt;br /&gt;
# Telnet 전체 차단&lt;br /&gt;
access-list 23 deny any&lt;br /&gt;
ip option telnet-acl access-group 23&lt;br /&gt;
end&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ES-3128GP ===&lt;br /&gt;
&lt;br /&gt;
ES-3128GP는 허용 원격 IP를 최대 2개까지 호스트 단위로 지정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# SSH 서비스 활성화&lt;br /&gt;
service ssh&lt;br /&gt;
&lt;br /&gt;
# 필요 시 SSH 포트 변경: 허용 범위 2000~10000&lt;br /&gt;
ip ssh port 2222&lt;br /&gt;
&lt;br /&gt;
# 접속 허용 관리 PC 지정: 최대 2개&lt;br /&gt;
allow remote-ip 192.168.10.100&lt;br /&gt;
allow remote-ip 192.168.10.101&lt;br /&gt;
&lt;br /&gt;
# Telnet 비활성화&lt;br /&gt;
no service telnet&lt;br /&gt;
end&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;적용 후 검증&#039;&#039;&#039;&lt;br /&gt;
# 기존 세션을 종료하지 않은 상태에서 새 SSH 세션으로 접속한다.&lt;br /&gt;
# 관리자 계정으로 로그인하고 &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; 진입을 확인한다.&lt;br /&gt;
# 허용되지 않은 IP에서 SSH 접속이 차단되는지 확인한다.&lt;br /&gt;
# Telnet 23번 포트가 차단되었는지 확인한 뒤 기존 세션을 종료한다.&lt;br /&gt;
&lt;br /&gt;
== 2.4 세션 타임아웃 및 로그인 배너 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# VTY 세션을 5분 무입력 시 종료&lt;br /&gt;
line vty 0 7&lt;br /&gt;
exec-timeout 5 0&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# 콘솔 세션을 10분 무입력 시 종료&lt;br /&gt;
line console 0&lt;br /&gt;
exec-timeout 10 0&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# 로그인 경고 배너 설정: 마지막 ^C 입력으로 종료&lt;br /&gt;
banner login ^C&lt;br /&gt;
************************************************************&lt;br /&gt;
인가된 관리자만 접근할 수 있습니다.&lt;br /&gt;
모든 접속 및 설정 변경은 기록됩니다.&lt;br /&gt;
************************************************************&lt;br /&gt;
^C&lt;br /&gt;
end&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 3. 관리 IP 및 운영 연동 =&lt;br /&gt;
&lt;br /&gt;
== 3.1 관리 VLAN IP와 기본 게이트웨이 ==&lt;br /&gt;
&lt;br /&gt;
원격 작업 중 관리 IP를 변경하면 접속이 끊긴다. 콘솔 접속 또는 현장 인력이 확보된 상태에서 작업한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 관리 VLAN 인터페이스 진입&lt;br /&gt;
interface vlan 10&lt;br /&gt;
&lt;br /&gt;
# 관리 IP 설정&lt;br /&gt;
ip address 192.168.10.251/24&lt;br /&gt;
no shutdown&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# 관리망 기본 게이트웨이 설정&lt;br /&gt;
ip default-gateway 192.168.10.254&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 설정 확인&lt;br /&gt;
show running-config interface vlan10&lt;br /&gt;
show running-config | include gateway&lt;br /&gt;
&lt;br /&gt;
# 저장&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;확인 포인트&#039;&#039;&#039;&lt;br /&gt;
* 관리 VLAN이 생성되어 있고 적어도 하나의 해당 VLAN 포트가 Link Up이어야 VLAN 인터페이스가 정상 동작한다.&lt;br /&gt;
* 동일 대역 PC에서 관리 IP Ping 후 SSH 접속을 확인한다.&lt;br /&gt;
* 다른 대역에서는 Gateway의 VLAN 인터페이스와 라우팅/ACL을 함께 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 3.2 시간 및 NTP ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 한국 표준시 UTC+9 설정&lt;br /&gt;
clock timezone KST 9&lt;br /&gt;
&lt;br /&gt;
# NTP 서버 지정&lt;br /&gt;
ntp server 192.168.10.20&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 현재 시간 확인&lt;br /&gt;
show clock&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NTP 사용이 불가능한 경우에만 수동으로 설정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 예: 2026년 8월 5일 22:30:00&lt;br /&gt;
clock set 22:30:00 5 August 2026&lt;br /&gt;
show clock&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3.3 Syslog ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# Syslog 서버 지정&lt;br /&gt;
logging 192.168.10.30&lt;br /&gt;
&lt;br /&gt;
# CPU와 메모리 임계치 알람 설정&lt;br /&gt;
# 1분 평균 CPU 40% 초과 시 발생, 30% 이하 복구&lt;br /&gt;
cpu usage threshold low 30 high 40&lt;br /&gt;
&lt;br /&gt;
# 가용 메모리 30% 이하 알람&lt;br /&gt;
memory free low-watermark 30&lt;br /&gt;
end&lt;br /&gt;
write memory&lt;br /&gt;
&lt;br /&gt;
# 로컬 로그 확인&lt;br /&gt;
show logging&lt;br /&gt;
show logging flash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
원격 Syslog 서버에서 장비 IP/Hostname, KST 시간, Link Up/Down 및 설정 저장 로그가 정상 수신되는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 3.4 SNMP ==&lt;br /&gt;
&lt;br /&gt;
교재는 SNMP Community 방식만 설명한다. 가능하면 Read Only만 사용하고 관리 서버 IP를 ACL로 제한한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# SNMP 관리 서버 192.168.10.40만 허용&lt;br /&gt;
access-list 50 permit 192.168.10.40&lt;br /&gt;
access-list 50 deny any&lt;br /&gt;
&lt;br /&gt;
# Read Only Community 설정&lt;br /&gt;
snmp-server community 현장별_복잡한_Community ro 50&lt;br /&gt;
end&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; 같은 기본 Community를 사용하지 않는다. Read Write Community는 특별한 운영 목적이 없으면 설정하지 않는다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 4. VLAN 및 포트 구성 =&lt;br /&gt;
&lt;br /&gt;
== 4.1 VLAN 생성 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
vlan database&lt;br /&gt;
&lt;br /&gt;
# Data, Voice, Management VLAN 생성&lt;br /&gt;
vlan 100&lt;br /&gt;
vlan 110&lt;br /&gt;
vlan 10&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# 생성 결과 확인&lt;br /&gt;
show vlan&lt;br /&gt;
show vlan brief&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 이미지 삽입 위치 03&lt;br /&gt;
권장 파일명: ES-3128G_vlan_create.png&lt;br /&gt;
원본 PDF: 34쪽&lt;br /&gt;
권장 내용: VLAN 생성 명령과 show vlan 결과&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.2 일반 단말 Access 포트 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# Gi0/1~Gi0/20을 Data VLAN 100 Access 포트로 설정&lt;br /&gt;
interface range gi 0/1-0/20&lt;br /&gt;
switchport mode access&lt;br /&gt;
switchport access vlan 100&lt;br /&gt;
spanning-tree portfast&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 적용 상태 확인&lt;br /&gt;
show vlan brief&lt;br /&gt;
show interface status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PortFast는 PC, 전화기, 서버 등 단말 포트에만 적용한다. 다른 스위치와 연결되는 업링크에는 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 4.3 업링크 Trunk 포트 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
interface gi 0/25&lt;br /&gt;
&lt;br /&gt;
# Trunk 모드 및 Native VLAN 지정&lt;br /&gt;
switchport mode trunk&lt;br /&gt;
switchport trunk native vlan 1&lt;br /&gt;
&lt;br /&gt;
# 필요한 VLAN만 허용&lt;br /&gt;
switchport trunk allowed vlan add 10&lt;br /&gt;
switchport trunk allowed vlan add 100&lt;br /&gt;
switchport trunk allowed vlan add 110&lt;br /&gt;
&lt;br /&gt;
# 회선 식별용 설명&lt;br /&gt;
description UPLINK_TO_CORE_Gi1_0_24&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 검증&lt;br /&gt;
show vlan brief&lt;br /&gt;
show interface status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_access_trunk1.png|1000px]]&lt;br /&gt;
[[File:ES-3128G_access_trunk2.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;확인 포인트&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;show vlan brief&amp;lt;/code&amp;gt;에서 Access 포트는 대상 VLAN에 &amp;lt;code&amp;gt;(u)&amp;lt;/code&amp;gt;, Trunk 포트는 허용 VLAN에 &amp;lt;code&amp;gt;(t)&amp;lt;/code&amp;gt;로 표시되는지 확인한다.&lt;br /&gt;
* 양쪽 Trunk의 Native VLAN과 허용 VLAN이 일치해야 한다.&lt;br /&gt;
* VLAN 1을 Native로 사용하지 않는 현장은 양쪽 장비에서 동일한 Native VLAN으로 변경한다.&lt;br /&gt;
&lt;br /&gt;
== 4.4 IP 전화기와 PC 동시 연결: Voice VLAN ==&lt;br /&gt;
&lt;br /&gt;
전화기 PC 포트 뒤에 사용자 PC가 연결되는 구성에서는 Data VLAN을 Untagged, Voice VLAN을 Tagged로 운용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# LLDP 전역 활성화&lt;br /&gt;
lldp run&lt;br /&gt;
&lt;br /&gt;
interface gi0/1&lt;br /&gt;
&lt;br /&gt;
# PC용 Data VLAN&lt;br /&gt;
switchport access vlan 100&lt;br /&gt;
&lt;br /&gt;
# 전화기용 Voice VLAN&lt;br /&gt;
switchport voice vlan 110&lt;br /&gt;
&lt;br /&gt;
# 전화기에 Voice VLAN 정책 전달&lt;br /&gt;
# 기본 QoS 값은 CoS 5, DSCP 46&lt;br /&gt;
lldp med-tlv-select network-policy voice vlan 110&lt;br /&gt;
&lt;br /&gt;
# 수신 CoS 값을 신뢰하여 음성 우선 처리&lt;br /&gt;
mls qos trust cos&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# LLDP-MED 정책과 이웃 확인&lt;br /&gt;
show lldp med policy&lt;br /&gt;
show lldp neighbor gi0/1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_voice_vlan_lldp_med.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;확인 포인트&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;show lldp med policy&amp;lt;/code&amp;gt;: 포트, Voice VLAN, DSCP 46, L2 Priority 5, Tagged 여부를 확인한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;show lldp neighbor&amp;lt;/code&amp;gt;: 전화기 또는 인접 장비의 MAC, Port ID, System Name을 확인한다.&lt;br /&gt;
* 전화기가 LLDP-MED를 지원하지 않으면 전화기 자체 VLAN 설정 또는 별도 Vendor/OUI 기반 방식이 필요한지 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 5. 루프 방지 및 업링크 이중화 =&lt;br /&gt;
&lt;br /&gt;
== 5.1 RSTP 기본 구성 ==&lt;br /&gt;
&lt;br /&gt;
일반적인 소규모 L2 구성에서는 RSTP를 권장한다. Root Priority는 전체 토폴로지 설계에 따라 중앙 스위치에서 더 낮게 설정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# RSTP 활성화&lt;br /&gt;
spanning-tree mode rstp&lt;br /&gt;
spanning-tree enable&lt;br /&gt;
&lt;br /&gt;
# 액세스 단말 포트에만 PortFast 적용&lt;br /&gt;
interface range gi 0/1-0/24&lt;br /&gt;
spanning-tree portfast&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 상태 확인&lt;br /&gt;
show spanning-tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;확인 포인트&#039;&#039;&#039;&lt;br /&gt;
* Root Bridge가 설계한 장비인지 확인한다.&lt;br /&gt;
* 이중 업링크 중 한쪽이 Blocking/Discarding 상태인지 확인한다.&lt;br /&gt;
* 장애 시험 시 Active 링크 단절 후 Standby 링크로 전환되는지 Ping과 로그로 검증한다.&lt;br /&gt;
&lt;br /&gt;
== 5.2 SLD(Self Loop Detection) ==&lt;br /&gt;
&lt;br /&gt;
SLD는 ES-3128G 전용으로 교재에 명시되어 있다. 현장 OS에서 지원 여부를 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 전역 SLD 활성화&lt;br /&gt;
sld enable&lt;br /&gt;
&lt;br /&gt;
# 가입자 포트에 SLD 적용&lt;br /&gt;
interface range gi 0/1-0/24&lt;br /&gt;
sld enable&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 루프 상태 확인&lt;br /&gt;
show sld&lt;br /&gt;
&lt;br /&gt;
# SLD 차단 포트 수동 복구 예시&lt;br /&gt;
clear sld gi 0/1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
교재의 전체 SLD 정책(Class-map/Policy-map)은 장비 MAC 패턴에 의존하므로 그대로 복사하지 말고 현장 장비의 System MAC과 OS 지원 문법을 확인한 후 적용한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_sld_loop_detection.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 5.3 LACP Link Aggregation ==&lt;br /&gt;
&lt;br /&gt;
양쪽 장비에서 멤버 포트의 Speed, Duplex, VLAN, Trunk 설정이 동일해야 한다. 한쪽은 Active, 상대편도 Active 또는 Passive로 설정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# Gi0/25~Gi0/26을 LACP Port-channel 1로 구성&lt;br /&gt;
interface range gi 0/25-0/26&lt;br /&gt;
channel-group 1 mode active&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# LACP 상태 확인&lt;br /&gt;
show etherchannel summary&lt;br /&gt;
show lacp-counter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;정상 기준&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;show etherchannel summary&amp;lt;/code&amp;gt;에서 Port-channel이 &amp;lt;code&amp;gt;SU&amp;lt;/code&amp;gt;, 멤버 포트가 &amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; 상태이다.&lt;br /&gt;
* &amp;lt;code&amp;gt;show lacp-counter&amp;lt;/code&amp;gt;에서 각 멤버 포트의 LACPDU Sent/Recv 값이 증가한다.&lt;br /&gt;
* 멤버 한 가닥을 제거해도 통신이 유지되며 나머지 링크로 트래픽이 전환된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_lacp.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 6. 액세스 포트 보호 =&lt;br /&gt;
&lt;br /&gt;
== 6.1 Storm Control ==&lt;br /&gt;
&lt;br /&gt;
Storm Control 임계치는 현장 트래픽을 측정한 뒤 적용한다. 교재의 0.05%는 1Gbps 포트 기준 약 500Kbps로 매우 낮아 정상적인 방송/멀티캐스트 서비스도 차단할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
interface gi0/3&lt;br /&gt;
&lt;br /&gt;
# 예시값: 적용 전 현장 트래픽 기준으로 조정&lt;br /&gt;
storm-control level 0.50&lt;br /&gt;
storm-control broadcast&lt;br /&gt;
storm-control multicast&lt;br /&gt;
storm-control unicast&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6.2 포트별 MAC 수 제한 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
interface gi0/3&lt;br /&gt;
&lt;br /&gt;
# Port Security 활성화&lt;br /&gt;
switchport port-security&lt;br /&gt;
&lt;br /&gt;
# 학습 가능한 MAC을 최대 3개로 제한&lt;br /&gt;
switchport port-security maximum 3&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IP 전화기 뒤에 PC가 연결되면 최소 2개 이상의 MAC이 보일 수 있다. AP, 허브, 가상화 서버 연결 포트에는 업무 특성에 맞는 값을 사용한다.&lt;br /&gt;
&lt;br /&gt;
== 6.3 특정 MAC 차단 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# VLAN 4000의 Gi0/24에서 특정 Source MAC 차단&lt;br /&gt;
mac-address-table static 0000.3010.4050 discard gi0/24 vlan 4000&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# fwd 값 0이면 차단, 1이면 허용&lt;br /&gt;
show mac-address-table&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6.4 미사용 포트 운영 기준 ==&lt;br /&gt;
&lt;br /&gt;
교재에는 미사용 포트 Shutdown 예제가 없으므로 실제 OS의 &amp;lt;code&amp;gt;shutdown&amp;lt;/code&amp;gt; 지원 여부를 CLI 도움말로 확인한 후 적용한다. 미사용 포트는 별도 격리 VLAN에 넣고 Description으로 상태를 표시한다.&lt;br /&gt;
&lt;br /&gt;
= 7. 포트 및 PoE 운영 =&lt;br /&gt;
&lt;br /&gt;
== 7.1 Speed/Duplex ==&lt;br /&gt;
&lt;br /&gt;
기본값인 Auto Negotiation을 우선 사용한다. 협상 불일치가 확인된 레거시 장비에 한해서만 양쪽을 동일하게 고정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
interface gi0/1&lt;br /&gt;
&lt;br /&gt;
# 레거시 장비와 양쪽을 100M Full로 고정하는 예시&lt;br /&gt;
speed 100&lt;br /&gt;
duplex full&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 협상 결과 확인&lt;br /&gt;
show interface status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CRC 증가, 낮은 처리량, 간헐적 끊김이 발생하면 한쪽 Auto/한쪽 고정으로 인한 Duplex 불일치를 우선 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 7.2 포트 Description ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 물리 포트 설명&lt;br /&gt;
interface gi0/1&lt;br /&gt;
description 1F-OFFICE-IPPHONE-001&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# VLAN 인터페이스 설명&lt;br /&gt;
interface vlan10&lt;br /&gt;
description MANAGEMENT&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
show interface description&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7.3 ES-3128GP PoE ==&lt;br /&gt;
&lt;br /&gt;
교재 기준 ES-3128GP는 총 370W, 802.3af 24포트 또는 802.3at 12포트 수준을 지원한다. 실제 동시 공급 가능 전력은 연결된 PD의 소비전력과 포트별 클래스에 따라 달라진다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
interface gi0/1&lt;br /&gt;
&lt;br /&gt;
# PoE 활성화: 기본값 활성화&lt;br /&gt;
power inline power-up enable&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 포트별 소비전력과 상태 확인&lt;br /&gt;
show power inline all-port-power&lt;br /&gt;
show power inline port-status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 상태 !! 의미 !! 조치&lt;br /&gt;
|-&lt;br /&gt;
| DET_IN_PROC || PD 감지 중 || 케이블 및 PD 연결 확인&lt;br /&gt;
|-&lt;br /&gt;
| 802-3AF-DET || 802.3af 장비 감지 || 정상 공급 여부와 소비전력 확인&lt;br /&gt;
|-&lt;br /&gt;
| 802-4PAIR-DET || 802.3at 장비 감지 || 전력 예산 확인&lt;br /&gt;
|-&lt;br /&gt;
| INTERNAL_HW_FAULT || PoE 칩 내부 오류 || 재확인 후 장비 점검/RMA 검토&lt;br /&gt;
|-&lt;br /&gt;
| EXT_VOLT || 포트로 외부 전원 유입 || 즉시 배선과 비표준 인젝터 확인&lt;br /&gt;
|-&lt;br /&gt;
| OVER_TEMP_AT_PORT || 포트 과온 || 부하, 통풍, 주변 온도 확인&lt;br /&gt;
|-&lt;br /&gt;
| PWR_BUDGET_EXCED || 전체 전력 예산 초과 || 불필요 PD 제거 또는 부하 분산&lt;br /&gt;
|-&lt;br /&gt;
| SHORT_CONDITION || PD 또는 케이블 단락 || 포트 분리 후 케이블/단말 교체 시험&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128GP_poe_status.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 8. 정기 점검 명령 =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 버전, 가동 시간, 재부팅 원인&lt;br /&gt;
show version&lt;br /&gt;
&lt;br /&gt;
# 전원, 팬, 온도&lt;br /&gt;
show environment&lt;br /&gt;
&lt;br /&gt;
# CPU와 메모리&lt;br /&gt;
show cpu usage&lt;br /&gt;
show memory usage&lt;br /&gt;
show process cpu&lt;br /&gt;
&lt;br /&gt;
# 포트 Link, VLAN, Speed/Duplex&lt;br /&gt;
show interface status&lt;br /&gt;
show interface description&lt;br /&gt;
&lt;br /&gt;
# 특정 포트 상세 및 오류 카운터&lt;br /&gt;
show interface gi0/1&lt;br /&gt;
show interface | include CRC&lt;br /&gt;
&lt;br /&gt;
# 트래픽: Kbps 및 5초/1분/5분 PPS&lt;br /&gt;
show port counter&lt;br /&gt;
show port statistics avg type&lt;br /&gt;
&lt;br /&gt;
# VLAN, STP, LACP, 루프&lt;br /&gt;
show vlan brief&lt;br /&gt;
show spanning-tree&lt;br /&gt;
show etherchannel summary&lt;br /&gt;
show lacp-counter&lt;br /&gt;
show sld&lt;br /&gt;
&lt;br /&gt;
# 인접 장비 및 단말 위치 추적&lt;br /&gt;
show lldp neighbor gi0/24&lt;br /&gt;
show arp&lt;br /&gt;
show mac-address-table&lt;br /&gt;
&lt;br /&gt;
# 로그&lt;br /&gt;
show logging&lt;br /&gt;
show logging flash&lt;br /&gt;
&lt;br /&gt;
# ES-3128GP PoE&lt;br /&gt;
show power inline all-port-power&lt;br /&gt;
show power inline port-status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 점검 항목 !! 정상 판단 기준 !! 이상 시 우선 확인&lt;br /&gt;
|-&lt;br /&gt;
| CPU || 교재 기준 1분 평균 30% 이내 || Broadcast/Multicast 폭주, 루프, 프로세스 점유율&lt;br /&gt;
|-&lt;br /&gt;
| Memory || Available 20% 이상 || 지속 감소 여부, 비정상 프로세스&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || 경보 없음, 임계치 미만 || 팬, 통풍, 랙 온도, 먼지&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 기준값 대비 증가하지 않음 || UTP/광 케이블, SFP, Duplex, 상대 포트&lt;br /&gt;
|-&lt;br /&gt;
| STP || Root/Blocking 포트가 설계와 일치 || 루프, 우선순위, 비정상 토폴로지 변경&lt;br /&gt;
|-&lt;br /&gt;
| LACP || Po 및 멤버 포트 Up, LACPDU 증가 || 양단 Mode, VLAN, Speed, 배선&lt;br /&gt;
|-&lt;br /&gt;
| PoE || 전력 예산 이내, Fault 없음 || PD, 케이블, 포트 온도, 총 소비전력&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 9. 장애 분석 절차 =&lt;br /&gt;
&lt;br /&gt;
== 9.1 포트 Link Down ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;증상 → 의심 구간 → 확인 → 조치 순서&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;증상&#039;&#039;&#039;: 단말 통신 불가, 포트 LED Off, &amp;lt;code&amp;gt;notconnect&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &#039;&#039;&#039;의심 구간&#039;&#039;&#039;: 단말 전원, 케이블, 패치패널, SFP, Speed/Duplex, PoE.&lt;br /&gt;
# &#039;&#039;&#039;확인&#039;&#039;&#039;:&lt;br /&gt;
#* &amp;lt;code&amp;gt;show interface status&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;show interface gi0/x&amp;lt;/code&amp;gt;&lt;br /&gt;
#* GP 모델은 &amp;lt;code&amp;gt;show power inline port-status&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;조치&#039;&#039;&#039;: 케이블/포트 교차 시험, 양단 Auto 복원, SFP 및 광 TX/RX 방향 점검, PoE Fault 원인 제거.&lt;br /&gt;
# &#039;&#039;&#039;재발 방지&#039;&#039;&#039;: Description 정리, 케이블 라벨링, 오류 카운터 기준값 기록.&lt;br /&gt;
&lt;br /&gt;
== 9.2 Link Up이나 통신 불가 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 물리 및 VLAN 상태&lt;br /&gt;
show interface status&lt;br /&gt;
show vlan brief&lt;br /&gt;
&lt;br /&gt;
# 단말 MAC 학습 위치&lt;br /&gt;
show mac-address-table&lt;br /&gt;
&lt;br /&gt;
# 상위 게이트웨이 ARP&lt;br /&gt;
show arp&lt;br /&gt;
&lt;br /&gt;
# STP 차단 여부&lt;br /&gt;
show spanning-tree&lt;br /&gt;
&lt;br /&gt;
# LLDP 인접 정보&lt;br /&gt;
show lldp neighbor gi0/24&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;확인 포인트&#039;&#039;&#039;&lt;br /&gt;
* Access VLAN 오지정, Trunk Allowed VLAN 누락, Native VLAN 불일치가 가장 흔하다.&lt;br /&gt;
* MAC이 액세스 포트에서 학습되는지, 업링크로 이동/Flapping하지 않는지 확인한다.&lt;br /&gt;
* 이중화 구간은 STP Blocking 포트가 예상 위치인지 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 9.3 CRC 증가 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 전체 포트에서 CRC가 있는 행 검색&lt;br /&gt;
show interface | include CRC&lt;br /&gt;
&lt;br /&gt;
# 문제 포트 상세 확인&lt;br /&gt;
show interface gi0/1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;조치 우선순위&#039;&#039;&#039;&lt;br /&gt;
# 기준 카운터 기록 후 5~10분 간격으로 증가 여부 확인.&lt;br /&gt;
# UTP 패치코드 교체 또는 광 패치코드 청소/교체.&lt;br /&gt;
# SFP 교체 및 상대 포트 오류 카운터 확인.&lt;br /&gt;
# 양단 Speed/Duplex를 Auto로 통일. 레거시 장비는 양단 동일 값으로 고정.&lt;br /&gt;
# 포트를 변경해 장애가 케이블/단말을 따라가는지 스위치 포트에 남는지 판별.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_crc_check.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 9.4 트래픽 폭주 또는 루프 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 포트별 대역폭 및 트래픽 유형 확인&lt;br /&gt;
show port counter&lt;br /&gt;
show port statistics avg type&lt;br /&gt;
&lt;br /&gt;
# STP/SLD 상태와 로그 확인&lt;br /&gt;
show spanning-tree&lt;br /&gt;
show sld&lt;br /&gt;
show logging&lt;br /&gt;
&lt;br /&gt;
# MAC 학습 이상 확인&lt;br /&gt;
show mac-address-table&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;조치&#039;&#039;&#039;&lt;br /&gt;
# Broadcast/Multicast가 비정상적으로 높은 포트를 특정한다.&lt;br /&gt;
# 액세스 포트를 하나씩 분리하거나 관리 Shutdown하여 원인 구간을 축소한다.&lt;br /&gt;
# SLD 차단 포트는 하위 배선을 정리한 뒤 &amp;lt;code&amp;gt;clear sld gi 0/x&amp;lt;/code&amp;gt;로 복구한다.&lt;br /&gt;
# 원인 제거 후 CPU, PPS, 로그가 정상화되는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 9.5 관리 접속 불가 ==&lt;br /&gt;
&lt;br /&gt;
# 동일 VLAN에서 관리 IP Ping 확인.&lt;br /&gt;
# 관리 VLAN의 Tagged/Untagged와 SVI 상태 확인.&lt;br /&gt;
# Gateway ARP 및 라우팅 확인.&lt;br /&gt;
# SSH/Telnet ACL에 현재 관리 PC가 허용되었는지 확인.&lt;br /&gt;
# 계정 5회 실패로 차단된 경우 5분 후 재시도.&lt;br /&gt;
# 원격 확인이 불가하면 콘솔로 접속하여 설정을 점검.&lt;br /&gt;
&lt;br /&gt;
= 10. 패킷 분석 =&lt;br /&gt;
&lt;br /&gt;
== 10.1 포트 미러링 ==&lt;br /&gt;
&lt;br /&gt;
교재의 예시는 &#039;&#039;&#039;모니터링 대상 Gi0/1의 양방향 트래픽을 분석 PC가 연결된 Gi0/5로 복사&#039;&#039;&#039;하는 구성이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 분석 PC가 연결된 목적 포트에서 미러 설정&lt;br /&gt;
interface gi0/5&lt;br /&gt;
mirror interface gi0/1 direction both&lt;br /&gt;
exit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 미러 상태 확인&lt;br /&gt;
show mirror&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
미러 목적 포트는 일반 업무 트래픽용으로 사용하지 않는다. 패킷 캡처가 끝나면 해당 인터페이스의 미러 설정을 제거하고 &amp;lt;code&amp;gt;show mirror&amp;lt;/code&amp;gt;로 확인한다.&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_port_mirroring.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
== 10.2 장비 내 TCPDump ==&lt;br /&gt;
&lt;br /&gt;
교재의 TCPDump는 CPU로 유입되는 트래픽을 확인하는 용도이다. 대량 트래픽을 장시간 캡처하면 CPU/Flash에 영향을 줄 수 있으므로 필터를 좁히고 짧게 수행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# VLAN 10의 ARP만 확인&lt;br /&gt;
tcpdump -i vlan10 arp&lt;br /&gt;
&lt;br /&gt;
# 특정 호스트만 확인&lt;br /&gt;
tcpdump -i vlan10 host 192.168.10.100&lt;br /&gt;
&lt;br /&gt;
# 현재 원격 관리 Telnet 세션을 제외&lt;br /&gt;
tcpdump -i vlan10 not port 23&lt;br /&gt;
&lt;br /&gt;
# Flash에 PCAP 저장: 캡처 크기와 Flash 여유 공간 주의&lt;br /&gt;
tcpdump -i vlan10 -s 1500 -w /flash/test.cap not port 23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 11. Config 복구 및 초기화 =&lt;br /&gt;
&lt;br /&gt;
== 11.1 Config 복구 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
Config 파일을 부팅 설정으로 지정하면 다음 재부팅부터 관리 IP, VLAN, 계정이 모두 변경될 수 있다. 대상 모델/OS 호환성과 백업 파일 내용을 확인하고 콘솔 연결 상태에서 작업한다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# TFTP의 백업 Config를 Flash에 test.cfg로 업로드&lt;br /&gt;
copy tftp config:&lt;br /&gt;
# IP address of remote host ? 192.168.1.100&lt;br /&gt;
# Source file name ? ES3128G_현장명_YYYYMMDD.cfg&lt;br /&gt;
# Destination file name ? test.cfg&lt;br /&gt;
&lt;br /&gt;
# 업로드 파일 확인&lt;br /&gt;
show flash:&lt;br /&gt;
&lt;br /&gt;
# 부팅 Config로 지정&lt;br /&gt;
boot config test.cfg&lt;br /&gt;
&lt;br /&gt;
# 지정 결과 재확인&lt;br /&gt;
show flash:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_config_restore1.png|1000px]]&lt;br /&gt;
[[File:ES-3128G_config_restore2.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
== 11.2 Startup Config 초기화 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-error&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;서비스 중단 작업&#039;&#039;&#039;: 초기화 후 모든 VLAN, 관리 IP, 계정, 업링크 설정이 삭제된다. 현장 출동, 콘솔, 백업 Config 및 재설정 계획 없이 수행하지 않는다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# Startup Config 확인&lt;br /&gt;
show startup-config&lt;br /&gt;
&lt;br /&gt;
# Startup Config 삭제&lt;br /&gt;
erase startup-config&lt;br /&gt;
&lt;br /&gt;
# 재부팅&lt;br /&gt;
reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
일부 ES-3128G OS에서는 다음 방식이 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# Flash 파일 확인&lt;br /&gt;
show flash&lt;br /&gt;
&lt;br /&gt;
# start.cfg 삭제&lt;br /&gt;
delete flash: start.cfg&lt;br /&gt;
&lt;br /&gt;
# 삭제 확인 후 재부팅&lt;br /&gt;
show flash&lt;br /&gt;
reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 12. OS 업그레이드 =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-error&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;위험 작업&#039;&#039;&#039;&lt;br /&gt;
* 현재 Config와 OS 이미지를 외부에 백업한다.&lt;br /&gt;
* 대상 모델과 정확히 일치하고 제조사에서 제공한 이미지인지 확인한다.&lt;br /&gt;
* Flash 여유 공간, 파일 크기 및 전송 완료 여부를 확인한다.&lt;br /&gt;
* 콘솔 연결, 안정적인 전원, TFTP/FTP 복구 서버를 준비한다.&lt;br /&gt;
* Bootloader는 제조사 지시가 있는 경우에만 업그레이드한다. 중단되면 장비가 부팅 불능이 될 수 있다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 12.1 OS 이미지 업로드 및 부팅 지정 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 현재 이미지, 부팅 이미지, Flash 여유 공간 확인&lt;br /&gt;
show version&lt;br /&gt;
show flash:&lt;br /&gt;
&lt;br /&gt;
# 공간이 부족한 경우 백업 OS만 선택적으로 삭제&lt;br /&gt;
# 현재 부팅 중인 이미지와 유일한 정상 이미지는 삭제하지 않는다.&lt;br /&gt;
delete flash: 구버전_OS_파일명.bin&lt;br /&gt;
&lt;br /&gt;
# FTP에서 새 OS를 Flash로 복사&lt;br /&gt;
copy ftp flash:&lt;br /&gt;
# IP address of remote host ? 192.168.1.100&lt;br /&gt;
# User ID ? ftpuser&lt;br /&gt;
# Password ? ********&lt;br /&gt;
# Source file name ? mvl2-lan.x.x.x.bin&lt;br /&gt;
# Destination file name ? mvl2-lan.x.x.x.bin&lt;br /&gt;
&lt;br /&gt;
# 파일 크기와 버전 정보 확인&lt;br /&gt;
show flash:&lt;br /&gt;
&lt;br /&gt;
# 새 OS를 다음 부팅 이미지로 지정&lt;br /&gt;
configure terminal&lt;br /&gt;
boot system flash mvl2-lan.x.x.x.bin&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 부팅 표시 재확인&lt;br /&gt;
show flash:&lt;br /&gt;
&lt;br /&gt;
# 설정 저장 후 재부팅&lt;br /&gt;
write memory&lt;br /&gt;
reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;재부팅 후 검증&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# OS/Bootloader/부팅 이미지 및 가동 시간&lt;br /&gt;
show version&lt;br /&gt;
&lt;br /&gt;
# 설정 유지 여부&lt;br /&gt;
show running-config&lt;br /&gt;
&lt;br /&gt;
# 주요 서비스 상태&lt;br /&gt;
show interface status&lt;br /&gt;
show vlan brief&lt;br /&gt;
show spanning-tree&lt;br /&gt;
show etherchannel summary&lt;br /&gt;
show logging&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_os_upgrade1.png|1000px]]&lt;br /&gt;
[[File:ES-3128G_os_upgrade2.png|1000px]]&lt;br /&gt;
[[File:ES-3128G_os_upgrade3.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 12.2 Bootloader 업그레이드 ==&lt;br /&gt;
&lt;br /&gt;
제조사가 해당 OS에 필요한 Bootloader 버전을 명시한 경우에만 수행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# TFTP에서 Bootloader 영역으로 직접 기록&lt;br /&gt;
copy tftp bootloader:&lt;br /&gt;
# IP address of remote host ? 192.168.1.100&lt;br /&gt;
# Source file name ? es3128_정확한_버전.kwb_os&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
쓰기 도중 전원 차단, 세션 중단 또는 잘못된 이미지 적용 시 복구가 어려울 수 있다. 완료 메시지가 나오기 전까지 장비를 조작하거나 전원을 끄지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 13. Boot-mode 긴급 복구 =&lt;br /&gt;
&lt;br /&gt;
== 13.1 OS 이미지 부팅 실패 ==&lt;br /&gt;
&lt;br /&gt;
적용 대상은 OS 이미지 손상, 부팅 이미지 미지정, Boot Variable 오류로 정상 부팅하지 못하는 경우이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-error&amp;quot;&amp;gt;&lt;br /&gt;
콘솔과 동일 대역 TFTP 서버가 필요하다. 아래 파일명은 예시이며 실제 장비 모델에 맞는 검증된 OS를 사용한다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 부팅 중 Ctrl+C를 눌러 BSP 모드 진입&lt;br /&gt;
&lt;br /&gt;
# 장비 임시 IP, Netmask, TFTP 서버 설정&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; setenv ipaddr 192.168.1.10&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; setenv netmask 255.255.255.0&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; setenv serverip 192.168.1.100&lt;br /&gt;
&lt;br /&gt;
# TFTP 서버의 복구 OS 파일 지정&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; setenv bootfile mvl2-lan.4.6.4.bin&lt;br /&gt;
&lt;br /&gt;
# 환경값 저장 및 부팅&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; saveenv&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; boot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
임시 OS로 정상 부팅한 뒤 Flash의 손상 이미지를 정리하고 정상 OS 업그레이드 절차를 다시 수행한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_boot_mode_recovery.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 13.2 비밀번호 초기화 ==&lt;br /&gt;
&lt;br /&gt;
비밀번호 초기화는 장비 소유권과 작업 승인을 확인하고 콘솔에서 수행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 부팅 중 Ctrl+C로 BSP 모드 진입&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; setenv epasswd yes&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; run bootcmd&lt;br /&gt;
&lt;br /&gt;
# 부팅 완료 후 기본 계정 로그인&lt;br /&gt;
ES-3128G login: admin&lt;br /&gt;
Password: 1234qweR#&lt;br /&gt;
&lt;br /&gt;
# 즉시 새 관리자 비밀번호 설정&lt;br /&gt;
enable&lt;br /&gt;
configure terminal&lt;br /&gt;
username admin privilege 15 password 새_강력한_비밀번호&lt;br /&gt;
end&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_password_recovery.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 14. 현장 표준 구성 예제 =&lt;br /&gt;
&lt;br /&gt;
== 14.1 예제 설계 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 값&lt;br /&gt;
|-&lt;br /&gt;
| Hostname || HQ-1F-SW01&lt;br /&gt;
|-&lt;br /&gt;
| 관리 VLAN/IP/GW || VLAN 10 / 192.168.10.251/24 / 192.168.10.254&lt;br /&gt;
|-&lt;br /&gt;
| Data VLAN || VLAN 100&lt;br /&gt;
|-&lt;br /&gt;
| Voice VLAN || VLAN 110&lt;br /&gt;
|-&lt;br /&gt;
| 사용자 포트 || Gi0/1~Gi0/20&lt;br /&gt;
|-&lt;br /&gt;
| 서버 포트 || Gi0/21~Gi0/24, VLAN 100&lt;br /&gt;
|-&lt;br /&gt;
| 업링크 || Gi0/25~Gi0/26, LACP Po1&lt;br /&gt;
|-&lt;br /&gt;
| 허용 VLAN || 10, 100, 110&lt;br /&gt;
|-&lt;br /&gt;
| STP || RSTP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 14.2 기본 구성 템플릿 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
enable&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 장비 식별&lt;br /&gt;
hostname HQ-1F-SW01&lt;br /&gt;
&lt;br /&gt;
# VLAN 생성&lt;br /&gt;
vlan database&lt;br /&gt;
vlan 10&lt;br /&gt;
vlan 100&lt;br /&gt;
vlan 110&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# 관리 IP&lt;br /&gt;
interface vlan10&lt;br /&gt;
ip address 192.168.10.251/24&lt;br /&gt;
description MANAGEMENT&lt;br /&gt;
no shutdown&lt;br /&gt;
exit&lt;br /&gt;
ip default-gateway 192.168.10.254&lt;br /&gt;
&lt;br /&gt;
# 일반 사용자 + IP 전화기 포트&lt;br /&gt;
lldp run&lt;br /&gt;
interface range gi 0/1-0/20&lt;br /&gt;
switchport access vlan 100&lt;br /&gt;
switchport voice vlan 110&lt;br /&gt;
lldp med-tlv-select network-policy voice vlan 110&lt;br /&gt;
mls qos trust cos&lt;br /&gt;
spanning-tree portfast&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# 서버 Access 포트&lt;br /&gt;
interface range gi 0/21-0/24&lt;br /&gt;
switchport mode access&lt;br /&gt;
switchport access vlan 100&lt;br /&gt;
spanning-tree portfast&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# 업링크 LACP&lt;br /&gt;
interface range gi 0/25-0/26&lt;br /&gt;
channel-group 1 mode active&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# RSTP&lt;br /&gt;
spanning-tree mode rstp&lt;br /&gt;
spanning-tree enable&lt;br /&gt;
&lt;br /&gt;
# 시간 및 운영 서버&lt;br /&gt;
clock timezone KST 9&lt;br /&gt;
ntp server 192.168.10.20&lt;br /&gt;
logging 192.168.10.30&lt;br /&gt;
&lt;br /&gt;
# 자원 임계치&lt;br /&gt;
cpu usage threshold low 30 high 40&lt;br /&gt;
memory free low-watermark 30&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
Port-channel의 VLAN/Trunk 설정 방식은 OS 버전에 따라 물리 멤버 또는 논리 Port-channel 인터페이스에 적용하는 문법이 다를 수 있다. &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; 도움말과 &amp;lt;code&amp;gt;show running-config&amp;lt;/code&amp;gt;로 실제 지원 방식을 확인한 후 VLAN 10/100/110을 허용한다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 14.3 최종 검증 체크리스트 ==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;show version&amp;lt;/code&amp;gt;: 모델, OS, Bootloader가 기록값과 일치한다.&lt;br /&gt;
# &amp;lt;code&amp;gt;show clock&amp;lt;/code&amp;gt;: KST 시간이 정확하다.&lt;br /&gt;
# 관리망/타망에서 Ping과 SSH 접속이 가능하다.&lt;br /&gt;
# 허용되지 않은 IP의 관리 접속은 차단된다.&lt;br /&gt;
# &amp;lt;code&amp;gt;show vlan brief&amp;lt;/code&amp;gt;: Access의 Untagged와 업링크의 Tagged VLAN이 설계와 일치한다.&lt;br /&gt;
# &amp;lt;code&amp;gt;show spanning-tree&amp;lt;/code&amp;gt;: Root 및 포트 역할이 정상이다.&lt;br /&gt;
# &amp;lt;code&amp;gt;show etherchannel summary&amp;lt;/code&amp;gt;: Po1과 멤버가 Up이다.&lt;br /&gt;
# 전화기와 PC가 각각 Voice/Data 대역 IP를 받는다.&lt;br /&gt;
# 내선 통화, 외부 통화, PC 업무 통신을 시험한다.&lt;br /&gt;
# &amp;lt;code&amp;gt;show lldp med policy&amp;lt;/code&amp;gt;: Voice VLAN 110, DSCP 46, CoS 5가 확인된다.&lt;br /&gt;
# &amp;lt;code&amp;gt;show interface | include CRC&amp;lt;/code&amp;gt;: 오류가 증가하지 않는다.&lt;br /&gt;
# Syslog/NMS에서 장비가 정상 수집된다.&lt;br /&gt;
# GP 모델은 PoE 총 소비전력이 370W 이내이며 Fault가 없다.&lt;br /&gt;
# Running Config를 저장하고 최종 Config를 외부로 백업한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ES-3128G_IPT_network_example1.png|1000px]]&lt;br /&gt;
[[File:ES-3128G_IPT_network_example2.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 15. 변경 작업 기록 양식 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 기록&lt;br /&gt;
|-&lt;br /&gt;
| 작업 일시 ||&lt;br /&gt;
|-&lt;br /&gt;
| 현장/장비명 ||&lt;br /&gt;
|-&lt;br /&gt;
| 모델/시리얼 ||&lt;br /&gt;
|-&lt;br /&gt;
| 작업 전 OS/Bootloader ||&lt;br /&gt;
|-&lt;br /&gt;
| 작업 후 OS/Bootloader ||&lt;br /&gt;
|-&lt;br /&gt;
| 작업 목적 ||&lt;br /&gt;
|-&lt;br /&gt;
| 변경 명령/포트/VLAN ||&lt;br /&gt;
|-&lt;br /&gt;
| 작업 전 Config 백업 파일 ||&lt;br /&gt;
|-&lt;br /&gt;
| 작업 후 Config 백업 파일 ||&lt;br /&gt;
|-&lt;br /&gt;
| 서비스 영향 시간 ||&lt;br /&gt;
|-&lt;br /&gt;
| 검증 결과 ||&lt;br /&gt;
|-&lt;br /&gt;
| 원복 기준 및 결과 ||&lt;br /&gt;
|-&lt;br /&gt;
| 작업자/검토자 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 16. 참고 이미지 목록 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 번호 !! 권장 이미지 파일명 !! 원본 PDF 쪽 !! 용도&lt;br /&gt;
|-&lt;br /&gt;
| 01 || ES-3128G_front_LED.png || 4~5 || 전면 포트와 LED 판독&lt;br /&gt;
|-&lt;br /&gt;
| 02 || ES-3128G_console_telnet_ssh.png || 11~12 || 접속 방법과 모델별 차이&lt;br /&gt;
|-&lt;br /&gt;
| 03 || ES-3128G_vlan_create.png || 34 || VLAN 생성&lt;br /&gt;
|-&lt;br /&gt;
| 04 || ES-3128G_access_trunk.png || 35~36 || Access/Trunk와 Tag 상태&lt;br /&gt;
|-&lt;br /&gt;
| 05 || ES-3128G_voice_vlan_lldp_med.png || 42 또는 75 || Voice VLAN/LLDP-MED&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ES-3128G_sld_loop_detection.png || 40 || SLD 루프 차단&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ES-3128G_lacp.png || 44 || LACP 구성과 검증&lt;br /&gt;
|-&lt;br /&gt;
| 08 || ES-3128GP_poe_status.png || 51 || PoE 상태 코드&lt;br /&gt;
|-&lt;br /&gt;
| 09 || ES-3128G_crc_check.png || 57 || CRC 장애 분석&lt;br /&gt;
|-&lt;br /&gt;
| 10 || ES-3128G_port_mirroring.png || 68 || 패킷 미러링&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ES-3128G_config_restore.png || 65~66 || Config 백업/복구&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ES-3128G_os_upgrade.png || 19~21 || OS 업그레이드&lt;br /&gt;
|-&lt;br /&gt;
| 13 || ES-3128G_boot_mode_recovery.png || 63 || Boot-mode 복구&lt;br /&gt;
|-&lt;br /&gt;
| 14 || ES-3128G_password_recovery.png || 64 || 비밀번호 초기화&lt;br /&gt;
|-&lt;br /&gt;
| 15 || ES-3128G_IPT_network_example.png || 74~75 || IPT 전체 구성 예제&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=분류:네트워크]]&lt;br /&gt;
[[index.php?title=분류:L2 스위치]]&lt;br /&gt;
[[index.php?title=분류:IPECS]]&lt;br /&gt;
[[index.php?title=분류:ES-3128G]]&lt;br /&gt;
[[index.php?title=분류:장애조치]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_IPT_network_example2.png&amp;diff=115</id>
		<title>파일:ES-3128G IPT network example2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_IPT_network_example2.png&amp;diff=115"/>
		<updated>2026-08-05T14:22:03Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_IPT_network_example1.png&amp;diff=114</id>
		<title>파일:ES-3128G IPT network example1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_IPT_network_example1.png&amp;diff=114"/>
		<updated>2026-08-05T14:22:03Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_password_recovery.png&amp;diff=113</id>
		<title>파일:ES-3128G password recovery.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_password_recovery.png&amp;diff=113"/>
		<updated>2026-08-05T14:19:44Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_boot_mode_recovery.png&amp;diff=112</id>
		<title>파일:ES-3128G boot mode recovery.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_boot_mode_recovery.png&amp;diff=112"/>
		<updated>2026-08-05T14:18:42Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_os_upgrade3.png&amp;diff=111</id>
		<title>파일:ES-3128G os upgrade3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_os_upgrade3.png&amp;diff=111"/>
		<updated>2026-08-05T14:17:09Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_os_upgrade2.png&amp;diff=110</id>
		<title>파일:ES-3128G os upgrade2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_os_upgrade2.png&amp;diff=110"/>
		<updated>2026-08-05T14:17:09Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_os_upgrade1.png&amp;diff=109</id>
		<title>파일:ES-3128G os upgrade1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_os_upgrade1.png&amp;diff=109"/>
		<updated>2026-08-05T14:17:09Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_config_restore2.png&amp;diff=108</id>
		<title>파일:ES-3128G config restore2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_config_restore2.png&amp;diff=108"/>
		<updated>2026-08-05T14:13:55Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_config_restore1.png&amp;diff=107</id>
		<title>파일:ES-3128G config restore1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_config_restore1.png&amp;diff=107"/>
		<updated>2026-08-05T14:13:55Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_port_mirroring.png&amp;diff=106</id>
		<title>파일:ES-3128G port mirroring.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_port_mirroring.png&amp;diff=106"/>
		<updated>2026-08-05T14:11:41Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_crc_check.png&amp;diff=105</id>
		<title>파일:ES-3128G crc check.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_crc_check.png&amp;diff=105"/>
		<updated>2026-08-05T14:10:16Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128GP_poe_status.png&amp;diff=104</id>
		<title>파일:ES-3128GP poe status.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128GP_poe_status.png&amp;diff=104"/>
		<updated>2026-08-05T14:08:10Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_lacp.png&amp;diff=103</id>
		<title>파일:ES-3128G lacp.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_lacp.png&amp;diff=103"/>
		<updated>2026-08-05T14:06:17Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_sld_loop_detection.png&amp;diff=102</id>
		<title>파일:ES-3128G sld loop detection.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_sld_loop_detection.png&amp;diff=102"/>
		<updated>2026-08-05T14:04:22Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_voice_vlan_lldp_med.png&amp;diff=101</id>
		<title>파일:ES-3128G voice vlan lldp med.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_voice_vlan_lldp_med.png&amp;diff=101"/>
		<updated>2026-08-05T14:02:21Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_access_trunk2.png&amp;diff=100</id>
		<title>파일:ES-3128G access trunk2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_access_trunk2.png&amp;diff=100"/>
		<updated>2026-08-05T14:00:26Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_access_trunk1.png&amp;diff=99</id>
		<title>파일:ES-3128G access trunk1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_access_trunk1.png&amp;diff=99"/>
		<updated>2026-08-05T14:00:26Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_front_LED.png&amp;diff=98</id>
		<title>파일:ES-3128G front LED.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:ES-3128G_front_LED.png&amp;diff=98"/>
		<updated>2026-08-05T13:47:00Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: MsUpload로 파일을 올림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MsUpload로 파일을 올림&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=L2_%EC%8A%A4%EC%9C%84%EC%B9%98_%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C_%EB%B3%B5%EA%B5%AC&amp;diff=97</id>
		<title>L2 스위치 패스워드 복구</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=L2_%EC%8A%A4%EC%9C%84%EC%B9%98_%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C_%EB%B3%B5%EA%B5%AC&amp;diff=97"/>
		<updated>2026-07-15T05:47:13Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: /* 7.3 안전한 대응 절차 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= L2 스위치 벤더별 패스워드 초기화 가이드 =&lt;br /&gt;
&lt;br /&gt;
== 1. 문서 목적 ==&lt;br /&gt;
&lt;br /&gt;
관리자 패스워드를 분실한 L2 스위치에서 기존 설정을 보존하면서 관리 권한을 복구하기 위한 현장 작업 절차를 정리한다.&lt;br /&gt;
&lt;br /&gt;
본 문서는 작성 시점에 확실히 알고 있는 내용만 기술한다. 모델 또는 펌웨어에 따라 확인되지 않은 부트로더 명령, 메뉴 번호, 설정 파일명은 추측하여 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 2. 작업 전 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;경고:&#039;&#039;&#039; 패스워드 복구 작업에는 장비 재부팅과 서비스 중단이 필요하다. 스택, 업링크 이중화, PoE 전화기 및 AP 수용 여부를 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
* 작업 대상 장비의 모델명, 시리얼 번호 및 펌웨어 버전을 기록한다.&lt;br /&gt;
* 콘솔 케이블과 콘솔 프로그램을 준비한다.&lt;br /&gt;
* 가능하면 현재 설정 백업본과 네트워크 구성도를 확보한다.&lt;br /&gt;
* 패스워드 복구와 공장초기화를 혼동하지 않는다.&lt;br /&gt;
* 설정 파일을 삭제하거나 공장초기화하기 전에 기존 설정 보존 방법을 먼저 확인한다.&lt;br /&gt;
* 부트 메뉴에서 파일시스템 초기화, 포맷, OS 이미지 삭제 항목을 선택하지 않는다.&lt;br /&gt;
* 스택 장비는 단독 장비와 절차가 다를 수 있으므로 스택 전체 상태를 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 3. 공통 준비사항 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 확인 내용&lt;br /&gt;
|-&lt;br /&gt;
| 콘솔 연결&lt;br /&gt;
| 장비 콘솔 포트 종류와 통신 속도를 확인한다. 일반적으로 9600 8-N-1이 많이 사용되지만 모델별로 다를 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 서비스 영향&lt;br /&gt;
| 재부팅 동안 스위치에 연결된 단말, 전화기, AP 및 하위 스위치 통신이 중단된다.&lt;br /&gt;
|-&lt;br /&gt;
| 복구 목표&lt;br /&gt;
| 기존 설정 보존 후 패스워드만 변경하는 것을 우선한다.&lt;br /&gt;
|-&lt;br /&gt;
| 최후 수단&lt;br /&gt;
| 정상적인 패스워드 복구가 불가능할 때만 공장초기화를 검토한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 4. Cisco Catalyst =&lt;br /&gt;
&lt;br /&gt;
== 4.1 적용 범위 ==&lt;br /&gt;
&lt;br /&gt;
다음 절차는 전통적인 Cisco Catalyst IOS 스위치에서 사용하는 대표적인 복구 방식이다.&lt;br /&gt;
&lt;br /&gt;
* Catalyst 2960/2960G/2960S/2960X 계열&lt;br /&gt;
* Catalyst 3560/3750 계열&lt;br /&gt;
&lt;br /&gt;
Catalyst 9200/9300 등 IOS XE 장비는 부트 변수와 복구 방식이 다를 수 있으므로 아래 IOS 절차를 그대로 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 4.2 기존 설정을 보존한 패스워드 복구 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결한다.&lt;br /&gt;
# 장비 전원을 껐다가 다시 켠다.&lt;br /&gt;
# 전원을 넣으면서 전면의 &#039;&#039;&#039;MODE&#039;&#039;&#039; 버튼을 누른다.&lt;br /&gt;
# 부트로더 프롬프트가 표시되면 MODE 버튼을 놓는다.&lt;br /&gt;
# 플래시 파일시스템을 초기화하고 기존 설정 파일을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 플래시 파일시스템 초기화&lt;br /&gt;
flash_init&lt;br /&gt;
&lt;br /&gt;
# 일부 구형 모델에서만 존재할 수 있음&lt;br /&gt;
load_helper&lt;br /&gt;
&lt;br /&gt;
# 플래시 파일 목록 확인&lt;br /&gt;
dir flash:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 기존 시작 설정 파일인 &#039;&#039;config.text&#039;&#039;를 임시 이름으로 변경한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 기존 시작 설정을 보존하기 위해 이름 변경&lt;br /&gt;
rename flash:config.text flash:config.text.old&lt;br /&gt;
&lt;br /&gt;
# 정상 부팅 시작&lt;br /&gt;
boot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 초기 설정 대화상자가 나오면 실행하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 초기 설정 대화상자 질문에 no 입력&lt;br /&gt;
Would you like to enter the initial configuration dialog? [yes/no]: no&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 특권 모드로 진입한다.&lt;br /&gt;
# 임시 파일명을 원래 이름으로 되돌린다.&lt;br /&gt;
# 기존 시작 설정을 현재 실행 설정에 병합한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 특권 모드 진입&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
# 기존 설정 파일명 복원&lt;br /&gt;
rename flash:config.text.old flash:config.text&lt;br /&gt;
&lt;br /&gt;
# 기존 설정을 실행 설정에 병합&lt;br /&gt;
copy startup-config running-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; copy 명령의 방향을 반대로 입력하지 않는다. 이 단계에서는 반드시 startup-config를 running-config로 불러와야 한다.&lt;br /&gt;
&lt;br /&gt;
# 새로운 로컬 관리자 계정과 enable secret을 설정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 전역 설정 모드 진입&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 신규 관리자 계정 생성 예제&lt;br /&gt;
username admin privilege 15 secret NEW_STRONG_PASSWORD&lt;br /&gt;
&lt;br /&gt;
# enable secret 변경&lt;br /&gt;
enable secret NEW_ENABLE_PASSWORD&lt;br /&gt;
&lt;br /&gt;
# 콘솔에서 로컬 계정 인증 사용&lt;br /&gt;
line console 0&lt;br /&gt;
login local&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# SSH VTY에서 로컬 계정 인증 사용&lt;br /&gt;
line vty 0 15&lt;br /&gt;
login local&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 변경 설정 저장&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.3 검증 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 저장된 설정과 현재 설정 비교에 필요한 주요 항목 확인&lt;br /&gt;
show running-config | include hostname|username|enable secret&lt;br /&gt;
show startup-config | include hostname|username|enable secret&lt;br /&gt;
&lt;br /&gt;
# VLAN과 포트 상태 확인&lt;br /&gt;
show vlan brief&lt;br /&gt;
show interfaces status&lt;br /&gt;
&lt;br /&gt;
# 스패닝트리 상태 확인&lt;br /&gt;
show spanning-tree summary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
장비를 재부팅하기 전에 SSH 또는 콘솔에서 새 계정으로 로그인되는지 확인한다. 재부팅 검증이 필요하면 유지보수 시간 안에 수행한다.&lt;br /&gt;
&lt;br /&gt;
== 4.4 Catalyst IOS XE 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
Catalyst 9200/9300 계열은 부트로더에서 시작 설정을 무시하도록 부팅한 뒤 기존 설정을 불러오는 방식이 사용되지만, 정확한 변수와 해제 명령은 모델·IOS XE 버전에 따라 확인해야 한다. 전통적인 &#039;&#039;config.text&#039;&#039; 이름 변경 절차를 임의로 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 5. Alcatel-Lucent Enterprise OmniSwitch OS6350-24 =&lt;br /&gt;
&lt;br /&gt;
== 5.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
OS6350은 Cisco IOS의 &#039;&#039;config.text&#039;&#039; 이름 변경 절차를 사용하는 장비가 아니다. 부팅 과정과 관리 계정 처리는 AOS 및 부트 환경에 종속된다.&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로는 OS6350-24의 특정 AOS 버전에 안전하게 공통 적용할 수 있는 부트 메뉴 번호, 패스워드 복구 명령 및 삭제 대상 파일명을 확정할 수 없다. 따라서 임의의 파일 삭제나 부트 명령을 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 5.2 현장 작업 기준 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결하고 부팅 로그에서 AOS 버전 및 부트 환경 버전을 기록한다.&lt;br /&gt;
# 부팅 중 표시되는 안내 문구에 패스워드 복구 또는 설정 무시 항목이 실제로 존재하는지 확인한다.&lt;br /&gt;
# 기존 설정 보존이 명시된 복구 기능만 사용한다.&lt;br /&gt;
# 설정 파일 삭제, working/certified 디렉터리 변경 또는 파일시스템 초기화는 수행하지 않는다.&lt;br /&gt;
# 복구 메뉴가 확인되지 않으면 ALE 기술지원 또는 해당 AOS 버전의 공식 매뉴얼을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; OmniSwitch의 working/certified 구조는 운영 이미지와 설정 관리에 영향을 줄 수 있다. 패스워드 복구 목적으로 관련 디렉터리를 임의 삭제하거나 복사하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 6. HPE 스위치 =&lt;br /&gt;
&lt;br /&gt;
== 6.1 ProCurve 및 ArubaOS-Switch 계열 ==&lt;br /&gt;
&lt;br /&gt;
HPE ProCurve 및 ArubaOS-Switch 장비 중 전면에 &#039;&#039;&#039;Clear&#039;&#039;&#039; 버튼이 있는 모델은 Clear 버튼으로 로컬 패스워드를 삭제할 수 있다. 이 동작은 일반적으로 구성 전체를 삭제하는 공장초기화와 다르다.&lt;br /&gt;
&lt;br /&gt;
=== 패스워드만 삭제 ===&lt;br /&gt;
&lt;br /&gt;
# 장비가 정상 부팅된 상태인지 확인한다.&lt;br /&gt;
# 전면의 &#039;&#039;&#039;Clear&#039;&#039;&#039; 버튼을 짧게 눌렀다가 놓는다.&lt;br /&gt;
# 콘솔에서 관리자 접근 가능 여부를 확인한다.&lt;br /&gt;
# 즉시 새로운 관리자 패스워드를 설정하고 저장한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; 관리자가 front-panel-security 기능으로 password-clear 동작을 비활성화한 장비에서는 이 방법이 동작하지 않을 수 있다. 모델별 버튼 위치와 동작을 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 공장초기화와 구분 ===&lt;br /&gt;
&lt;br /&gt;
Clear 버튼과 Reset 버튼을 조합하는 동작은 설정 전체 삭제로 이어질 수 있다. 패스워드만 복구하려는 경우 두 버튼을 함께 누르지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 검증 예제 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 현재 설정 확인&lt;br /&gt;
show running-config&lt;br /&gt;
&lt;br /&gt;
# VLAN 확인&lt;br /&gt;
show vlans&lt;br /&gt;
&lt;br /&gt;
# 포트 상태 확인&lt;br /&gt;
show interfaces brief&lt;br /&gt;
&lt;br /&gt;
# 설정 저장&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6.2 HPE Comware 계열 ==&lt;br /&gt;
&lt;br /&gt;
Comware 장비는 일반적으로 부팅 중 BootWare 메뉴에 진입하여 시작 설정을 무시하는 복구 방식을 사용한다. BootWare 메뉴 번호와 표현은 모델 및 버전에 따라 달라질 수 있으므로 번호를 고정하여 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
현장에서는 다음 원칙을 적용한다.&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결하고 장비를 재부팅한다.&lt;br /&gt;
# 부팅 화면에 표시되는 키를 사용하여 BootWare 메뉴에 진입한다.&lt;br /&gt;
# 시작 설정을 삭제하는 항목이 아니라, 이번 부팅에서만 시작 설정을 건너뛰는 항목을 선택한다.&lt;br /&gt;
# 장비 부팅 후 기존 저장 설정을 실행 설정으로 불러온다.&lt;br /&gt;
# 관리자 인증 정보를 변경한다.&lt;br /&gt;
# 다음 부팅에서 시작 설정 무시 상태가 유지되지 않도록 복구 옵션을 해제한다.&lt;br /&gt;
# 설정을 저장하고 재부팅하여 검증한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;경고:&#039;&#039;&#039; BootWare의 파일시스템 포맷, 애플리케이션 삭제 및 설정 파일 삭제 항목을 선택하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 7. iPECS ES-3128GP =&lt;br /&gt;
&lt;br /&gt;
== 7.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 ES-3128GP의 펌웨어 전반에 공통 적용 가능한 부트 진입 키, 패스워드 복구 메뉴 번호 및 설정 파일명을 확정할 수 없다. Cisco 또는 HPE 명령을 유사하게 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 7.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 전원을 재인가한다.&lt;br /&gt;
# 전체 부팅 로그를 저장하고 모델명과 소프트웨어 버전을 확인한다.&lt;br /&gt;
# 화면에 표시된 복구 안내가 있을 때만 해당 키를 사용한다.&lt;br /&gt;
# 설정 보존 여부가 명시되지 않은 reset, erase, default 또는 format 항목은 선택하지 않는다.&lt;br /&gt;
# 복구 기능이 확인되지 않으면 iPECS 기술지원에 모델, 시리얼 번호 및 펌웨어 버전을 전달하여 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 7.3 패스워드 복구 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 패스워드 초기화시 CLI 설정 방법.&amp;lt;syntaxhighlight line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;#① 장비가 리부팅 시 , Ctrl + C 키를 사용해서 BSP 모드로 진입한다&lt;br /&gt;
#② BSP 모드 프롬프트에서 패스워드를 초기화한다&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; setenv epasswd yes&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; run bootcmd&lt;br /&gt;
&lt;br /&gt;
## 해당 명령어는 구버젼 OS만 해당된다 ##&lt;br /&gt;
#③부팅완료 후 default 계정으로 접속되는지 확인한다&lt;br /&gt;
ES-3128G login: admin&lt;br /&gt;
Password:1234qweR#&lt;br /&gt;
Hello.&lt;br /&gt;
ES-3128G&amp;gt; enable&lt;br /&gt;
ES-3128G# conf t&lt;br /&gt;
ES-3128G( config )# username admin password 1q2w3e4r!Q&lt;br /&gt;
ES-3128G# write memory&lt;br /&gt;
Overwrite &#039;flash: tae0c&#039;? [y/n]&lt;br /&gt;
yes&lt;br /&gt;
Building configuration...&lt;br /&gt;
&lt;br /&gt;
## 신버젼 OS는 초기 로그인시 root 입력시 생성할 계정과 패스워드 물어본다 ##&lt;br /&gt;
ES-3128G login: root&lt;br /&gt;
새로 생성할 계정 :&lt;br /&gt;
패스워드 :&lt;br /&gt;
패스워드 재입력 :&lt;br /&gt;
&lt;br /&gt;
새로 만든 계정으로 입력&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 8. 유비쿼스 E4020-24T =&lt;br /&gt;
&lt;br /&gt;
== 8.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 E4020-24T의 부트로더별 패스워드 초기화 명령이나 설정 파일명을 확정할 수 없다. 확인되지 않은 명령은 사용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 8.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 부팅 로그를 저장한다.&lt;br /&gt;
# 장비 소프트웨어 버전과 부트로더 버전을 기록한다.&lt;br /&gt;
# 부팅 화면에 설정 보존형 패스워드 복구 기능이 명시되는지 확인한다.&lt;br /&gt;
# 설정 삭제 또는 공장초기화만 제공되는 경우 먼저 설정 백업 확보 가능 여부를 확인한다.&lt;br /&gt;
# 유비쿼스 기술지원 또는 해당 버전 매뉴얼을 통해 정확한 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 9. 코어엣지 C3100-24PL =&lt;br /&gt;
&lt;br /&gt;
== 9.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 C3100-24PL의 펌웨어 전반에 적용 가능한 부트 메뉴 번호, 계정 초기화 명령 및 설정 파일명을 확정할 수 없다.&lt;br /&gt;
&lt;br /&gt;
== 9.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 부팅 로그를 저장한다.&lt;br /&gt;
# 정확한 모델명, 펌웨어 버전 및 부트로더 버전을 확인한다.&lt;br /&gt;
# 부트 메뉴가 나타나더라도 설정 삭제, 플래시 포맷 또는 OS 이미지 삭제 항목은 선택하지 않는다.&lt;br /&gt;
# 설정 보존형 복구 절차가 화면에 명확하게 표시되는 경우에만 진행한다.&lt;br /&gt;
# 확인되지 않으면 코어엣지 기술지원에 장비 정보와 부팅 로그를 전달한다.&lt;br /&gt;
&lt;br /&gt;
= 10. 한드림넷 SG2428G =&lt;br /&gt;
&lt;br /&gt;
== 10.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 SG2428G의 소프트웨어 버전별 패스워드 복구 키, 부트 메뉴 번호 및 삭제 대상 설정 파일을 확정할 수 없다.&lt;br /&gt;
&lt;br /&gt;
== 10.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 장비를 재부팅하고 부팅 로그를 저장한다.&lt;br /&gt;
# 정확한 소프트웨어와 부트로더 버전을 기록한다.&lt;br /&gt;
# 패스워드 복구와 공장초기화 항목을 구분한다.&lt;br /&gt;
# 설정 보존 여부가 확인되지 않은 초기화 작업은 중단한다.&lt;br /&gt;
# 한드림넷 기술지원 또는 해당 버전 매뉴얼로 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 11. 복구 후 공통 점검 =&lt;br /&gt;
&lt;br /&gt;
== 11.1 관리 계정 점검 ==&lt;br /&gt;
&lt;br /&gt;
* 새 관리자 계정으로 콘솔 로그인을 확인한다.&lt;br /&gt;
* SSH 로그인을 확인한다.&lt;br /&gt;
* Telnet이 불필요하면 비활성화한다.&lt;br /&gt;
* 기본 계정 또는 기본 패스워드가 남아 있는지 확인한다.&lt;br /&gt;
* RADIUS/TACACS+ 사용 장비는 로컬 비상 계정을 별도로 검증한다.&lt;br /&gt;
&lt;br /&gt;
== 11.2 네트워크 설정 점검 ==&lt;br /&gt;
&lt;br /&gt;
* 관리 IP 주소, 서브넷 마스크 및 기본 게이트웨이&lt;br /&gt;
* 관리 VLAN과 관리 포트&lt;br /&gt;
* VLAN 및 Trunk/Tagged/Untagged 설정&lt;br /&gt;
* STP 루트 및 차단 포트 상태&lt;br /&gt;
* LACP 또는 포트 채널 상태&lt;br /&gt;
* PoE 포트와 전력 공급 상태&lt;br /&gt;
* LLDP 및 음성 VLAN 상태&lt;br /&gt;
* SNMP, Syslog, NTP 및 인증 서버 설정&lt;br /&gt;
* 스택 또는 IRF/VSF 구성 상태&lt;br /&gt;
&lt;br /&gt;
== 11.3 최종 저장 및 재부팅 검증 ==&lt;br /&gt;
&lt;br /&gt;
# 변경 설정을 저장한다.&lt;br /&gt;
# 저장 설정에 신규 계정과 기존 네트워크 설정이 모두 존재하는지 확인한다.&lt;br /&gt;
# 유지보수 시간 내 장비를 재부팅한다.&lt;br /&gt;
# 신규 계정 로그인과 전체 포트 상태를 다시 확인한다.&lt;br /&gt;
# 장애 발생 시 비교할 수 있도록 복구 후 설정을 별도 백업한다.&lt;br /&gt;
&lt;br /&gt;
= 12. 현장 기록 양식 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 기록&lt;br /&gt;
|-&lt;br /&gt;
| 작업 일시&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 작업자&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 제조사/모델&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 시리얼 번호&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 펌웨어 버전&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 부트로더 버전&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 기존 설정 백업 위치&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 사용한 복구 방식&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 설정 보존 여부&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 로그인 검증 결과&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 네트워크 검증 결과&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 13. 적용 범위 요약 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 벤더/계열&lt;br /&gt;
! 본 문서의 상세도&lt;br /&gt;
! 비고&lt;br /&gt;
|-&lt;br /&gt;
| Cisco Catalyst IOS&lt;br /&gt;
| 명령어 포함&lt;br /&gt;
| 2960/3560/3750 계열 대표 절차&lt;br /&gt;
|-&lt;br /&gt;
| Cisco Catalyst IOS XE&lt;br /&gt;
| 원칙만 기술&lt;br /&gt;
| 모델 및 버전별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| Alcatel OS6350-24&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| AOS 및 부트 환경별 공식 절차 필요&lt;br /&gt;
|-&lt;br /&gt;
| HPE ProCurve/ArubaOS-Switch&lt;br /&gt;
| 버튼 절차 포함&lt;br /&gt;
| front-panel-security 설정에 따라 제한 가능&lt;br /&gt;
|-&lt;br /&gt;
| HPE Comware&lt;br /&gt;
| 복구 흐름 기술&lt;br /&gt;
| BootWare 메뉴 번호는 버전별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| iPECS ES-3128GP&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 펌웨어별 공식 절차 필요&lt;br /&gt;
|-&lt;br /&gt;
| 유비쿼스 E4020-24T&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 소프트웨어 및 부트로더별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| 코어엣지 C3100-24PL&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 펌웨어 및 부트로더별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| 한드림넷 SG2428G&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 소프트웨어 및 부트로더별 확인 필요&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=분류:네트워크]]&lt;br /&gt;
[[index.php?title=분류:L2 스위치]]&lt;br /&gt;
[[index.php?title=분류:장애 대응]]&lt;br /&gt;
[[index.php?title=분류:패스워드 복구]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=L2_%EC%8A%A4%EC%9C%84%EC%B9%98_%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C_%EB%B3%B5%EA%B5%AC&amp;diff=96</id>
		<title>L2 스위치 패스워드 복구</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=L2_%EC%8A%A4%EC%9C%84%EC%B9%98_%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C_%EB%B3%B5%EA%B5%AC&amp;diff=96"/>
		<updated>2026-07-15T05:45:29Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= L2 스위치 벤더별 패스워드 초기화 가이드 =&lt;br /&gt;
&lt;br /&gt;
== 1. 문서 목적 ==&lt;br /&gt;
&lt;br /&gt;
관리자 패스워드를 분실한 L2 스위치에서 기존 설정을 보존하면서 관리 권한을 복구하기 위한 현장 작업 절차를 정리한다.&lt;br /&gt;
&lt;br /&gt;
본 문서는 작성 시점에 확실히 알고 있는 내용만 기술한다. 모델 또는 펌웨어에 따라 확인되지 않은 부트로더 명령, 메뉴 번호, 설정 파일명은 추측하여 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 2. 작업 전 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;경고:&#039;&#039;&#039; 패스워드 복구 작업에는 장비 재부팅과 서비스 중단이 필요하다. 스택, 업링크 이중화, PoE 전화기 및 AP 수용 여부를 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
* 작업 대상 장비의 모델명, 시리얼 번호 및 펌웨어 버전을 기록한다.&lt;br /&gt;
* 콘솔 케이블과 콘솔 프로그램을 준비한다.&lt;br /&gt;
* 가능하면 현재 설정 백업본과 네트워크 구성도를 확보한다.&lt;br /&gt;
* 패스워드 복구와 공장초기화를 혼동하지 않는다.&lt;br /&gt;
* 설정 파일을 삭제하거나 공장초기화하기 전에 기존 설정 보존 방법을 먼저 확인한다.&lt;br /&gt;
* 부트 메뉴에서 파일시스템 초기화, 포맷, OS 이미지 삭제 항목을 선택하지 않는다.&lt;br /&gt;
* 스택 장비는 단독 장비와 절차가 다를 수 있으므로 스택 전체 상태를 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 3. 공통 준비사항 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 확인 내용&lt;br /&gt;
|-&lt;br /&gt;
| 콘솔 연결&lt;br /&gt;
| 장비 콘솔 포트 종류와 통신 속도를 확인한다. 일반적으로 9600 8-N-1이 많이 사용되지만 모델별로 다를 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 서비스 영향&lt;br /&gt;
| 재부팅 동안 스위치에 연결된 단말, 전화기, AP 및 하위 스위치 통신이 중단된다.&lt;br /&gt;
|-&lt;br /&gt;
| 복구 목표&lt;br /&gt;
| 기존 설정 보존 후 패스워드만 변경하는 것을 우선한다.&lt;br /&gt;
|-&lt;br /&gt;
| 최후 수단&lt;br /&gt;
| 정상적인 패스워드 복구가 불가능할 때만 공장초기화를 검토한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 4. Cisco Catalyst =&lt;br /&gt;
&lt;br /&gt;
== 4.1 적용 범위 ==&lt;br /&gt;
&lt;br /&gt;
다음 절차는 전통적인 Cisco Catalyst IOS 스위치에서 사용하는 대표적인 복구 방식이다.&lt;br /&gt;
&lt;br /&gt;
* Catalyst 2960/2960G/2960S/2960X 계열&lt;br /&gt;
* Catalyst 3560/3750 계열&lt;br /&gt;
&lt;br /&gt;
Catalyst 9200/9300 등 IOS XE 장비는 부트 변수와 복구 방식이 다를 수 있으므로 아래 IOS 절차를 그대로 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 4.2 기존 설정을 보존한 패스워드 복구 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결한다.&lt;br /&gt;
# 장비 전원을 껐다가 다시 켠다.&lt;br /&gt;
# 전원을 넣으면서 전면의 &#039;&#039;&#039;MODE&#039;&#039;&#039; 버튼을 누른다.&lt;br /&gt;
# 부트로더 프롬프트가 표시되면 MODE 버튼을 놓는다.&lt;br /&gt;
# 플래시 파일시스템을 초기화하고 기존 설정 파일을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 플래시 파일시스템 초기화&lt;br /&gt;
flash_init&lt;br /&gt;
&lt;br /&gt;
# 일부 구형 모델에서만 존재할 수 있음&lt;br /&gt;
load_helper&lt;br /&gt;
&lt;br /&gt;
# 플래시 파일 목록 확인&lt;br /&gt;
dir flash:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 기존 시작 설정 파일인 &#039;&#039;config.text&#039;&#039;를 임시 이름으로 변경한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 기존 시작 설정을 보존하기 위해 이름 변경&lt;br /&gt;
rename flash:config.text flash:config.text.old&lt;br /&gt;
&lt;br /&gt;
# 정상 부팅 시작&lt;br /&gt;
boot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 초기 설정 대화상자가 나오면 실행하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 초기 설정 대화상자 질문에 no 입력&lt;br /&gt;
Would you like to enter the initial configuration dialog? [yes/no]: no&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 특권 모드로 진입한다.&lt;br /&gt;
# 임시 파일명을 원래 이름으로 되돌린다.&lt;br /&gt;
# 기존 시작 설정을 현재 실행 설정에 병합한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 특권 모드 진입&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
# 기존 설정 파일명 복원&lt;br /&gt;
rename flash:config.text.old flash:config.text&lt;br /&gt;
&lt;br /&gt;
# 기존 설정을 실행 설정에 병합&lt;br /&gt;
copy startup-config running-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; copy 명령의 방향을 반대로 입력하지 않는다. 이 단계에서는 반드시 startup-config를 running-config로 불러와야 한다.&lt;br /&gt;
&lt;br /&gt;
# 새로운 로컬 관리자 계정과 enable secret을 설정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 전역 설정 모드 진입&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 신규 관리자 계정 생성 예제&lt;br /&gt;
username admin privilege 15 secret NEW_STRONG_PASSWORD&lt;br /&gt;
&lt;br /&gt;
# enable secret 변경&lt;br /&gt;
enable secret NEW_ENABLE_PASSWORD&lt;br /&gt;
&lt;br /&gt;
# 콘솔에서 로컬 계정 인증 사용&lt;br /&gt;
line console 0&lt;br /&gt;
login local&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# SSH VTY에서 로컬 계정 인증 사용&lt;br /&gt;
line vty 0 15&lt;br /&gt;
login local&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 변경 설정 저장&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.3 검증 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 저장된 설정과 현재 설정 비교에 필요한 주요 항목 확인&lt;br /&gt;
show running-config | include hostname|username|enable secret&lt;br /&gt;
show startup-config | include hostname|username|enable secret&lt;br /&gt;
&lt;br /&gt;
# VLAN과 포트 상태 확인&lt;br /&gt;
show vlan brief&lt;br /&gt;
show interfaces status&lt;br /&gt;
&lt;br /&gt;
# 스패닝트리 상태 확인&lt;br /&gt;
show spanning-tree summary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
장비를 재부팅하기 전에 SSH 또는 콘솔에서 새 계정으로 로그인되는지 확인한다. 재부팅 검증이 필요하면 유지보수 시간 안에 수행한다.&lt;br /&gt;
&lt;br /&gt;
== 4.4 Catalyst IOS XE 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
Catalyst 9200/9300 계열은 부트로더에서 시작 설정을 무시하도록 부팅한 뒤 기존 설정을 불러오는 방식이 사용되지만, 정확한 변수와 해제 명령은 모델·IOS XE 버전에 따라 확인해야 한다. 전통적인 &#039;&#039;config.text&#039;&#039; 이름 변경 절차를 임의로 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 5. Alcatel-Lucent Enterprise OmniSwitch OS6350-24 =&lt;br /&gt;
&lt;br /&gt;
== 5.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
OS6350은 Cisco IOS의 &#039;&#039;config.text&#039;&#039; 이름 변경 절차를 사용하는 장비가 아니다. 부팅 과정과 관리 계정 처리는 AOS 및 부트 환경에 종속된다.&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로는 OS6350-24의 특정 AOS 버전에 안전하게 공통 적용할 수 있는 부트 메뉴 번호, 패스워드 복구 명령 및 삭제 대상 파일명을 확정할 수 없다. 따라서 임의의 파일 삭제나 부트 명령을 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 5.2 현장 작업 기준 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결하고 부팅 로그에서 AOS 버전 및 부트 환경 버전을 기록한다.&lt;br /&gt;
# 부팅 중 표시되는 안내 문구에 패스워드 복구 또는 설정 무시 항목이 실제로 존재하는지 확인한다.&lt;br /&gt;
# 기존 설정 보존이 명시된 복구 기능만 사용한다.&lt;br /&gt;
# 설정 파일 삭제, working/certified 디렉터리 변경 또는 파일시스템 초기화는 수행하지 않는다.&lt;br /&gt;
# 복구 메뉴가 확인되지 않으면 ALE 기술지원 또는 해당 AOS 버전의 공식 매뉴얼을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; OmniSwitch의 working/certified 구조는 운영 이미지와 설정 관리에 영향을 줄 수 있다. 패스워드 복구 목적으로 관련 디렉터리를 임의 삭제하거나 복사하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 6. HPE 스위치 =&lt;br /&gt;
&lt;br /&gt;
== 6.1 ProCurve 및 ArubaOS-Switch 계열 ==&lt;br /&gt;
&lt;br /&gt;
HPE ProCurve 및 ArubaOS-Switch 장비 중 전면에 &#039;&#039;&#039;Clear&#039;&#039;&#039; 버튼이 있는 모델은 Clear 버튼으로 로컬 패스워드를 삭제할 수 있다. 이 동작은 일반적으로 구성 전체를 삭제하는 공장초기화와 다르다.&lt;br /&gt;
&lt;br /&gt;
=== 패스워드만 삭제 ===&lt;br /&gt;
&lt;br /&gt;
# 장비가 정상 부팅된 상태인지 확인한다.&lt;br /&gt;
# 전면의 &#039;&#039;&#039;Clear&#039;&#039;&#039; 버튼을 짧게 눌렀다가 놓는다.&lt;br /&gt;
# 콘솔에서 관리자 접근 가능 여부를 확인한다.&lt;br /&gt;
# 즉시 새로운 관리자 패스워드를 설정하고 저장한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; 관리자가 front-panel-security 기능으로 password-clear 동작을 비활성화한 장비에서는 이 방법이 동작하지 않을 수 있다. 모델별 버튼 위치와 동작을 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 공장초기화와 구분 ===&lt;br /&gt;
&lt;br /&gt;
Clear 버튼과 Reset 버튼을 조합하는 동작은 설정 전체 삭제로 이어질 수 있다. 패스워드만 복구하려는 경우 두 버튼을 함께 누르지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 검증 예제 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 현재 설정 확인&lt;br /&gt;
show running-config&lt;br /&gt;
&lt;br /&gt;
# VLAN 확인&lt;br /&gt;
show vlans&lt;br /&gt;
&lt;br /&gt;
# 포트 상태 확인&lt;br /&gt;
show interfaces brief&lt;br /&gt;
&lt;br /&gt;
# 설정 저장&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6.2 HPE Comware 계열 ==&lt;br /&gt;
&lt;br /&gt;
Comware 장비는 일반적으로 부팅 중 BootWare 메뉴에 진입하여 시작 설정을 무시하는 복구 방식을 사용한다. BootWare 메뉴 번호와 표현은 모델 및 버전에 따라 달라질 수 있으므로 번호를 고정하여 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
현장에서는 다음 원칙을 적용한다.&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결하고 장비를 재부팅한다.&lt;br /&gt;
# 부팅 화면에 표시되는 키를 사용하여 BootWare 메뉴에 진입한다.&lt;br /&gt;
# 시작 설정을 삭제하는 항목이 아니라, 이번 부팅에서만 시작 설정을 건너뛰는 항목을 선택한다.&lt;br /&gt;
# 장비 부팅 후 기존 저장 설정을 실행 설정으로 불러온다.&lt;br /&gt;
# 관리자 인증 정보를 변경한다.&lt;br /&gt;
# 다음 부팅에서 시작 설정 무시 상태가 유지되지 않도록 복구 옵션을 해제한다.&lt;br /&gt;
# 설정을 저장하고 재부팅하여 검증한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;경고:&#039;&#039;&#039; BootWare의 파일시스템 포맷, 애플리케이션 삭제 및 설정 파일 삭제 항목을 선택하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 7. iPECS ES-3128GP =&lt;br /&gt;
&lt;br /&gt;
== 7.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 ES-3128GP의 펌웨어 전반에 공통 적용 가능한 부트 진입 키, 패스워드 복구 메뉴 번호 및 설정 파일명을 확정할 수 없다. Cisco 또는 HPE 명령을 유사하게 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 7.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 전원을 재인가한다.&lt;br /&gt;
# 전체 부팅 로그를 저장하고 모델명과 소프트웨어 버전을 확인한다.&lt;br /&gt;
# 화면에 표시된 복구 안내가 있을 때만 해당 키를 사용한다.&lt;br /&gt;
# 설정 보존 여부가 명시되지 않은 reset, erase, default 또는 format 항목은 선택하지 않는다.&lt;br /&gt;
# 복구 기능이 확인되지 않으면 iPECS 기술지원에 모델, 시리얼 번호 및 펌웨어 버전을 전달하여 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 7.3 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 패스워드 초기화시 CLI 설정 방법.&amp;lt;syntaxhighlight line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;#① 장비가 리부팅 시 , Ctrl + C 키를 사용해서 BSP 모드로 진입한다&lt;br /&gt;
#② BSP 모드 프롬프트에서 패스워드를 초기화한다&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; setenv epasswd yes&lt;br /&gt;
ubiQuoss&amp;gt;&amp;gt; run bootcmd&lt;br /&gt;
&lt;br /&gt;
## 해당 명령어는 구버젼 OS만 해당된다 ##&lt;br /&gt;
#③부팅완료 후 default 계정으로 접속되는지 확인한다&lt;br /&gt;
ES-3128G login: admin&lt;br /&gt;
Password:1234qweR#&lt;br /&gt;
Hello.&lt;br /&gt;
ES-3128G&amp;gt; enable&lt;br /&gt;
ES-3128G# conf t&lt;br /&gt;
ES-3128G( config )# username admin password 1q2w3e4r!Q&lt;br /&gt;
ES-3128G# write memory&lt;br /&gt;
Overwrite &#039;flash: tae0c&#039;? [y/n]&lt;br /&gt;
yes&lt;br /&gt;
Building configuration...&lt;br /&gt;
&lt;br /&gt;
## 신버젼 OS는 초기 로그인시 root 입력시 생성할 계정과 패스워드 물어본다 ##&lt;br /&gt;
ES-3128G login: root&lt;br /&gt;
새로 생성할 계정 :&lt;br /&gt;
패스워드 :&lt;br /&gt;
패스워드 재입력 :&lt;br /&gt;
&lt;br /&gt;
새로 만든 계정으로 입력&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 8. 유비쿼스 E4020-24T =&lt;br /&gt;
&lt;br /&gt;
== 8.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 E4020-24T의 부트로더별 패스워드 초기화 명령이나 설정 파일명을 확정할 수 없다. 확인되지 않은 명령은 사용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 8.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 부팅 로그를 저장한다.&lt;br /&gt;
# 장비 소프트웨어 버전과 부트로더 버전을 기록한다.&lt;br /&gt;
# 부팅 화면에 설정 보존형 패스워드 복구 기능이 명시되는지 확인한다.&lt;br /&gt;
# 설정 삭제 또는 공장초기화만 제공되는 경우 먼저 설정 백업 확보 가능 여부를 확인한다.&lt;br /&gt;
# 유비쿼스 기술지원 또는 해당 버전 매뉴얼을 통해 정확한 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 9. 코어엣지 C3100-24PL =&lt;br /&gt;
&lt;br /&gt;
== 9.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 C3100-24PL의 펌웨어 전반에 적용 가능한 부트 메뉴 번호, 계정 초기화 명령 및 설정 파일명을 확정할 수 없다.&lt;br /&gt;
&lt;br /&gt;
== 9.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 부팅 로그를 저장한다.&lt;br /&gt;
# 정확한 모델명, 펌웨어 버전 및 부트로더 버전을 확인한다.&lt;br /&gt;
# 부트 메뉴가 나타나더라도 설정 삭제, 플래시 포맷 또는 OS 이미지 삭제 항목은 선택하지 않는다.&lt;br /&gt;
# 설정 보존형 복구 절차가 화면에 명확하게 표시되는 경우에만 진행한다.&lt;br /&gt;
# 확인되지 않으면 코어엣지 기술지원에 장비 정보와 부팅 로그를 전달한다.&lt;br /&gt;
&lt;br /&gt;
= 10. 한드림넷 SG2428G =&lt;br /&gt;
&lt;br /&gt;
== 10.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 SG2428G의 소프트웨어 버전별 패스워드 복구 키, 부트 메뉴 번호 및 삭제 대상 설정 파일을 확정할 수 없다.&lt;br /&gt;
&lt;br /&gt;
== 10.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 장비를 재부팅하고 부팅 로그를 저장한다.&lt;br /&gt;
# 정확한 소프트웨어와 부트로더 버전을 기록한다.&lt;br /&gt;
# 패스워드 복구와 공장초기화 항목을 구분한다.&lt;br /&gt;
# 설정 보존 여부가 확인되지 않은 초기화 작업은 중단한다.&lt;br /&gt;
# 한드림넷 기술지원 또는 해당 버전 매뉴얼로 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 11. 복구 후 공통 점검 =&lt;br /&gt;
&lt;br /&gt;
== 11.1 관리 계정 점검 ==&lt;br /&gt;
&lt;br /&gt;
* 새 관리자 계정으로 콘솔 로그인을 확인한다.&lt;br /&gt;
* SSH 로그인을 확인한다.&lt;br /&gt;
* Telnet이 불필요하면 비활성화한다.&lt;br /&gt;
* 기본 계정 또는 기본 패스워드가 남아 있는지 확인한다.&lt;br /&gt;
* RADIUS/TACACS+ 사용 장비는 로컬 비상 계정을 별도로 검증한다.&lt;br /&gt;
&lt;br /&gt;
== 11.2 네트워크 설정 점검 ==&lt;br /&gt;
&lt;br /&gt;
* 관리 IP 주소, 서브넷 마스크 및 기본 게이트웨이&lt;br /&gt;
* 관리 VLAN과 관리 포트&lt;br /&gt;
* VLAN 및 Trunk/Tagged/Untagged 설정&lt;br /&gt;
* STP 루트 및 차단 포트 상태&lt;br /&gt;
* LACP 또는 포트 채널 상태&lt;br /&gt;
* PoE 포트와 전력 공급 상태&lt;br /&gt;
* LLDP 및 음성 VLAN 상태&lt;br /&gt;
* SNMP, Syslog, NTP 및 인증 서버 설정&lt;br /&gt;
* 스택 또는 IRF/VSF 구성 상태&lt;br /&gt;
&lt;br /&gt;
== 11.3 최종 저장 및 재부팅 검증 ==&lt;br /&gt;
&lt;br /&gt;
# 변경 설정을 저장한다.&lt;br /&gt;
# 저장 설정에 신규 계정과 기존 네트워크 설정이 모두 존재하는지 확인한다.&lt;br /&gt;
# 유지보수 시간 내 장비를 재부팅한다.&lt;br /&gt;
# 신규 계정 로그인과 전체 포트 상태를 다시 확인한다.&lt;br /&gt;
# 장애 발생 시 비교할 수 있도록 복구 후 설정을 별도 백업한다.&lt;br /&gt;
&lt;br /&gt;
= 12. 현장 기록 양식 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 기록&lt;br /&gt;
|-&lt;br /&gt;
| 작업 일시&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 작업자&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 제조사/모델&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 시리얼 번호&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 펌웨어 버전&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 부트로더 버전&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 기존 설정 백업 위치&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 사용한 복구 방식&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 설정 보존 여부&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 로그인 검증 결과&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 네트워크 검증 결과&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 13. 적용 범위 요약 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 벤더/계열&lt;br /&gt;
! 본 문서의 상세도&lt;br /&gt;
! 비고&lt;br /&gt;
|-&lt;br /&gt;
| Cisco Catalyst IOS&lt;br /&gt;
| 명령어 포함&lt;br /&gt;
| 2960/3560/3750 계열 대표 절차&lt;br /&gt;
|-&lt;br /&gt;
| Cisco Catalyst IOS XE&lt;br /&gt;
| 원칙만 기술&lt;br /&gt;
| 모델 및 버전별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| Alcatel OS6350-24&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| AOS 및 부트 환경별 공식 절차 필요&lt;br /&gt;
|-&lt;br /&gt;
| HPE ProCurve/ArubaOS-Switch&lt;br /&gt;
| 버튼 절차 포함&lt;br /&gt;
| front-panel-security 설정에 따라 제한 가능&lt;br /&gt;
|-&lt;br /&gt;
| HPE Comware&lt;br /&gt;
| 복구 흐름 기술&lt;br /&gt;
| BootWare 메뉴 번호는 버전별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| iPECS ES-3128GP&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 펌웨어별 공식 절차 필요&lt;br /&gt;
|-&lt;br /&gt;
| 유비쿼스 E4020-24T&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 소프트웨어 및 부트로더별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| 코어엣지 C3100-24PL&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 펌웨어 및 부트로더별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| 한드림넷 SG2428G&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 소프트웨어 및 부트로더별 확인 필요&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=분류:네트워크]]&lt;br /&gt;
[[index.php?title=분류:L2 스위치]]&lt;br /&gt;
[[index.php?title=분류:장애 대응]]&lt;br /&gt;
[[index.php?title=분류:패스워드 복구]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=L2_%EC%8A%A4%EC%9C%84%EC%B9%98_%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C_%EB%B3%B5%EA%B5%AC&amp;diff=95</id>
		<title>L2 스위치 패스워드 복구</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=L2_%EC%8A%A4%EC%9C%84%EC%B9%98_%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C_%EB%B3%B5%EA%B5%AC&amp;diff=95"/>
		<updated>2026-07-15T05:28:48Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: 새 문서: = L2 스위치 벤더별 패스워드 초기화 가이드 =  == 1. 문서 목적 ==  관리자 패스워드를 분실한 L2 스위치에서 기존 설정을 보존하면서 관리 권한을 복구하기 위한 현장 작업 절차를 정리한다.  본 문서는 작성 시점에 확실히 알고 있는 내용만 기술한다. 모델 또는 펌웨어에 따라 확인되지 않은 부트로더 명령, 메뉴 번호, 설정 파일명은 추측하여 기재하지 않는다.  == 2....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= L2 스위치 벤더별 패스워드 초기화 가이드 =&lt;br /&gt;
&lt;br /&gt;
== 1. 문서 목적 ==&lt;br /&gt;
&lt;br /&gt;
관리자 패스워드를 분실한 L2 스위치에서 기존 설정을 보존하면서 관리 권한을 복구하기 위한 현장 작업 절차를 정리한다.&lt;br /&gt;
&lt;br /&gt;
본 문서는 작성 시점에 확실히 알고 있는 내용만 기술한다. 모델 또는 펌웨어에 따라 확인되지 않은 부트로더 명령, 메뉴 번호, 설정 파일명은 추측하여 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 2. 작업 전 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;경고:&#039;&#039;&#039; 패스워드 복구 작업에는 장비 재부팅과 서비스 중단이 필요하다. 스택, 업링크 이중화, PoE 전화기 및 AP 수용 여부를 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
* 작업 대상 장비의 모델명, 시리얼 번호 및 펌웨어 버전을 기록한다.&lt;br /&gt;
* 콘솔 케이블과 콘솔 프로그램을 준비한다.&lt;br /&gt;
* 가능하면 현재 설정 백업본과 네트워크 구성도를 확보한다.&lt;br /&gt;
* 패스워드 복구와 공장초기화를 혼동하지 않는다.&lt;br /&gt;
* 설정 파일을 삭제하거나 공장초기화하기 전에 기존 설정 보존 방법을 먼저 확인한다.&lt;br /&gt;
* 부트 메뉴에서 파일시스템 초기화, 포맷, OS 이미지 삭제 항목을 선택하지 않는다.&lt;br /&gt;
* 스택 장비는 단독 장비와 절차가 다를 수 있으므로 스택 전체 상태를 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 3. 공통 준비사항 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 확인 내용&lt;br /&gt;
|-&lt;br /&gt;
| 콘솔 연결&lt;br /&gt;
| 장비 콘솔 포트 종류와 통신 속도를 확인한다. 일반적으로 9600 8-N-1이 많이 사용되지만 모델별로 다를 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 서비스 영향&lt;br /&gt;
| 재부팅 동안 스위치에 연결된 단말, 전화기, AP 및 하위 스위치 통신이 중단된다.&lt;br /&gt;
|-&lt;br /&gt;
| 복구 목표&lt;br /&gt;
| 기존 설정 보존 후 패스워드만 변경하는 것을 우선한다.&lt;br /&gt;
|-&lt;br /&gt;
| 최후 수단&lt;br /&gt;
| 정상적인 패스워드 복구가 불가능할 때만 공장초기화를 검토한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 4. Cisco Catalyst =&lt;br /&gt;
&lt;br /&gt;
== 4.1 적용 범위 ==&lt;br /&gt;
&lt;br /&gt;
다음 절차는 전통적인 Cisco Catalyst IOS 스위치에서 사용하는 대표적인 복구 방식이다.&lt;br /&gt;
&lt;br /&gt;
* Catalyst 2960/2960G/2960S/2960X 계열&lt;br /&gt;
* Catalyst 3560/3750 계열&lt;br /&gt;
&lt;br /&gt;
Catalyst 9200/9300 등 IOS XE 장비는 부트 변수와 복구 방식이 다를 수 있으므로 아래 IOS 절차를 그대로 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 4.2 기존 설정을 보존한 패스워드 복구 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결한다.&lt;br /&gt;
# 장비 전원을 껐다가 다시 켠다.&lt;br /&gt;
# 전원을 넣으면서 전면의 &#039;&#039;&#039;MODE&#039;&#039;&#039; 버튼을 누른다.&lt;br /&gt;
# 부트로더 프롬프트가 표시되면 MODE 버튼을 놓는다.&lt;br /&gt;
# 플래시 파일시스템을 초기화하고 기존 설정 파일을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 플래시 파일시스템 초기화&lt;br /&gt;
flash_init&lt;br /&gt;
&lt;br /&gt;
# 일부 구형 모델에서만 존재할 수 있음&lt;br /&gt;
load_helper&lt;br /&gt;
&lt;br /&gt;
# 플래시 파일 목록 확인&lt;br /&gt;
dir flash:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 기존 시작 설정 파일인 &#039;&#039;config.text&#039;&#039;를 임시 이름으로 변경한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 기존 시작 설정을 보존하기 위해 이름 변경&lt;br /&gt;
rename flash:config.text flash:config.text.old&lt;br /&gt;
&lt;br /&gt;
# 정상 부팅 시작&lt;br /&gt;
boot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 초기 설정 대화상자가 나오면 실행하지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 초기 설정 대화상자 질문에 no 입력&lt;br /&gt;
Would you like to enter the initial configuration dialog? [yes/no]: no&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 특권 모드로 진입한다.&lt;br /&gt;
# 임시 파일명을 원래 이름으로 되돌린다.&lt;br /&gt;
# 기존 시작 설정을 현재 실행 설정에 병합한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 특권 모드 진입&lt;br /&gt;
enable&lt;br /&gt;
&lt;br /&gt;
# 기존 설정 파일명 복원&lt;br /&gt;
rename flash:config.text.old flash:config.text&lt;br /&gt;
&lt;br /&gt;
# 기존 설정을 실행 설정에 병합&lt;br /&gt;
copy startup-config running-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; copy 명령의 방향을 반대로 입력하지 않는다. 이 단계에서는 반드시 startup-config를 running-config로 불러와야 한다.&lt;br /&gt;
&lt;br /&gt;
# 새로운 로컬 관리자 계정과 enable secret을 설정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 전역 설정 모드 진입&lt;br /&gt;
configure terminal&lt;br /&gt;
&lt;br /&gt;
# 신규 관리자 계정 생성 예제&lt;br /&gt;
username admin privilege 15 secret NEW_STRONG_PASSWORD&lt;br /&gt;
&lt;br /&gt;
# enable secret 변경&lt;br /&gt;
enable secret NEW_ENABLE_PASSWORD&lt;br /&gt;
&lt;br /&gt;
# 콘솔에서 로컬 계정 인증 사용&lt;br /&gt;
line console 0&lt;br /&gt;
login local&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
# SSH VTY에서 로컬 계정 인증 사용&lt;br /&gt;
line vty 0 15&lt;br /&gt;
login local&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 변경 설정 저장&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.3 검증 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 저장된 설정과 현재 설정 비교에 필요한 주요 항목 확인&lt;br /&gt;
show running-config | include hostname|username|enable secret&lt;br /&gt;
show startup-config | include hostname|username|enable secret&lt;br /&gt;
&lt;br /&gt;
# VLAN과 포트 상태 확인&lt;br /&gt;
show vlan brief&lt;br /&gt;
show interfaces status&lt;br /&gt;
&lt;br /&gt;
# 스패닝트리 상태 확인&lt;br /&gt;
show spanning-tree summary&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
장비를 재부팅하기 전에 SSH 또는 콘솔에서 새 계정으로 로그인되는지 확인한다. 재부팅 검증이 필요하면 유지보수 시간 안에 수행한다.&lt;br /&gt;
&lt;br /&gt;
== 4.4 Catalyst IOS XE 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
Catalyst 9200/9300 계열은 부트로더에서 시작 설정을 무시하도록 부팅한 뒤 기존 설정을 불러오는 방식이 사용되지만, 정확한 변수와 해제 명령은 모델·IOS XE 버전에 따라 확인해야 한다. 전통적인 &#039;&#039;config.text&#039;&#039; 이름 변경 절차를 임의로 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 5. Alcatel-Lucent Enterprise OmniSwitch OS6350-24 =&lt;br /&gt;
&lt;br /&gt;
== 5.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
OS6350은 Cisco IOS의 &#039;&#039;config.text&#039;&#039; 이름 변경 절차를 사용하는 장비가 아니다. 부팅 과정과 관리 계정 처리는 AOS 및 부트 환경에 종속된다.&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로는 OS6350-24의 특정 AOS 버전에 안전하게 공통 적용할 수 있는 부트 메뉴 번호, 패스워드 복구 명령 및 삭제 대상 파일명을 확정할 수 없다. 따라서 임의의 파일 삭제나 부트 명령을 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 5.2 현장 작업 기준 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결하고 부팅 로그에서 AOS 버전 및 부트 환경 버전을 기록한다.&lt;br /&gt;
# 부팅 중 표시되는 안내 문구에 패스워드 복구 또는 설정 무시 항목이 실제로 존재하는지 확인한다.&lt;br /&gt;
# 기존 설정 보존이 명시된 복구 기능만 사용한다.&lt;br /&gt;
# 설정 파일 삭제, working/certified 디렉터리 변경 또는 파일시스템 초기화는 수행하지 않는다.&lt;br /&gt;
# 복구 메뉴가 확인되지 않으면 ALE 기술지원 또는 해당 AOS 버전의 공식 매뉴얼을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; OmniSwitch의 working/certified 구조는 운영 이미지와 설정 관리에 영향을 줄 수 있다. 패스워드 복구 목적으로 관련 디렉터리를 임의 삭제하거나 복사하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 6. HPE 스위치 =&lt;br /&gt;
&lt;br /&gt;
== 6.1 ProCurve 및 ArubaOS-Switch 계열 ==&lt;br /&gt;
&lt;br /&gt;
HPE ProCurve 및 ArubaOS-Switch 장비 중 전면에 &#039;&#039;&#039;Clear&#039;&#039;&#039; 버튼이 있는 모델은 Clear 버튼으로 로컬 패스워드를 삭제할 수 있다. 이 동작은 일반적으로 구성 전체를 삭제하는 공장초기화와 다르다.&lt;br /&gt;
&lt;br /&gt;
=== 패스워드만 삭제 ===&lt;br /&gt;
&lt;br /&gt;
# 장비가 정상 부팅된 상태인지 확인한다.&lt;br /&gt;
# 전면의 &#039;&#039;&#039;Clear&#039;&#039;&#039; 버튼을 짧게 눌렀다가 놓는다.&lt;br /&gt;
# 콘솔에서 관리자 접근 가능 여부를 확인한다.&lt;br /&gt;
# 즉시 새로운 관리자 패스워드를 설정하고 저장한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; 관리자가 front-panel-security 기능으로 password-clear 동작을 비활성화한 장비에서는 이 방법이 동작하지 않을 수 있다. 모델별 버튼 위치와 동작을 확인한다.&lt;br /&gt;
&lt;br /&gt;
=== 공장초기화와 구분 ===&lt;br /&gt;
&lt;br /&gt;
Clear 버튼과 Reset 버튼을 조합하는 동작은 설정 전체 삭제로 이어질 수 있다. 패스워드만 복구하려는 경우 두 버튼을 함께 누르지 않는다.&lt;br /&gt;
&lt;br /&gt;
=== 검증 예제 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 현재 설정 확인&lt;br /&gt;
show running-config&lt;br /&gt;
&lt;br /&gt;
# VLAN 확인&lt;br /&gt;
show vlans&lt;br /&gt;
&lt;br /&gt;
# 포트 상태 확인&lt;br /&gt;
show interfaces brief&lt;br /&gt;
&lt;br /&gt;
# 설정 저장&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6.2 HPE Comware 계열 ==&lt;br /&gt;
&lt;br /&gt;
Comware 장비는 일반적으로 부팅 중 BootWare 메뉴에 진입하여 시작 설정을 무시하는 복구 방식을 사용한다. BootWare 메뉴 번호와 표현은 모델 및 버전에 따라 달라질 수 있으므로 번호를 고정하여 기재하지 않는다.&lt;br /&gt;
&lt;br /&gt;
현장에서는 다음 원칙을 적용한다.&lt;br /&gt;
&lt;br /&gt;
# 콘솔을 연결하고 장비를 재부팅한다.&lt;br /&gt;
# 부팅 화면에 표시되는 키를 사용하여 BootWare 메뉴에 진입한다.&lt;br /&gt;
# 시작 설정을 삭제하는 항목이 아니라, 이번 부팅에서만 시작 설정을 건너뛰는 항목을 선택한다.&lt;br /&gt;
# 장비 부팅 후 기존 저장 설정을 실행 설정으로 불러온다.&lt;br /&gt;
# 관리자 인증 정보를 변경한다.&lt;br /&gt;
# 다음 부팅에서 시작 설정 무시 상태가 유지되지 않도록 복구 옵션을 해제한다.&lt;br /&gt;
# 설정을 저장하고 재부팅하여 검증한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;경고:&#039;&#039;&#039; BootWare의 파일시스템 포맷, 애플리케이션 삭제 및 설정 파일 삭제 항목을 선택하지 않는다.&lt;br /&gt;
&lt;br /&gt;
= 7. iPECS ES-3128GP =&lt;br /&gt;
&lt;br /&gt;
== 7.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 ES-3128GP의 펌웨어 전반에 공통 적용 가능한 부트 진입 키, 패스워드 복구 메뉴 번호 및 설정 파일명을 확정할 수 없다. Cisco 또는 HPE 명령을 유사하게 적용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 7.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 전원을 재인가한다.&lt;br /&gt;
# 전체 부팅 로그를 저장하고 모델명과 소프트웨어 버전을 확인한다.&lt;br /&gt;
# 화면에 표시된 복구 안내가 있을 때만 해당 키를 사용한다.&lt;br /&gt;
# 설정 보존 여부가 명시되지 않은 reset, erase, default 또는 format 항목은 선택하지 않는다.&lt;br /&gt;
# 복구 기능이 확인되지 않으면 iPECS 기술지원에 모델, 시리얼 번호 및 펌웨어 버전을 전달하여 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 8. 유비쿼스 E4020-24T =&lt;br /&gt;
&lt;br /&gt;
== 8.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 E4020-24T의 부트로더별 패스워드 초기화 명령이나 설정 파일명을 확정할 수 없다. 확인되지 않은 명령은 사용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 8.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 부팅 로그를 저장한다.&lt;br /&gt;
# 장비 소프트웨어 버전과 부트로더 버전을 기록한다.&lt;br /&gt;
# 부팅 화면에 설정 보존형 패스워드 복구 기능이 명시되는지 확인한다.&lt;br /&gt;
# 설정 삭제 또는 공장초기화만 제공되는 경우 먼저 설정 백업 확보 가능 여부를 확인한다.&lt;br /&gt;
# 유비쿼스 기술지원 또는 해당 버전 매뉴얼을 통해 정확한 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 9. 코어엣지 C3100-24PL =&lt;br /&gt;
&lt;br /&gt;
== 9.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 C3100-24PL의 펌웨어 전반에 적용 가능한 부트 메뉴 번호, 계정 초기화 명령 및 설정 파일명을 확정할 수 없다.&lt;br /&gt;
&lt;br /&gt;
== 9.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 부팅 로그를 저장한다.&lt;br /&gt;
# 정확한 모델명, 펌웨어 버전 및 부트로더 버전을 확인한다.&lt;br /&gt;
# 부트 메뉴가 나타나더라도 설정 삭제, 플래시 포맷 또는 OS 이미지 삭제 항목은 선택하지 않는다.&lt;br /&gt;
# 설정 보존형 복구 절차가 화면에 명확하게 표시되는 경우에만 진행한다.&lt;br /&gt;
# 확인되지 않으면 코어엣지 기술지원에 장비 정보와 부팅 로그를 전달한다.&lt;br /&gt;
&lt;br /&gt;
= 10. 한드림넷 SG2428G =&lt;br /&gt;
&lt;br /&gt;
== 10.1 확인된 범위 ==&lt;br /&gt;
&lt;br /&gt;
현재 알고 있는 정보만으로 SG2428G의 소프트웨어 버전별 패스워드 복구 키, 부트 메뉴 번호 및 삭제 대상 설정 파일을 확정할 수 없다.&lt;br /&gt;
&lt;br /&gt;
== 10.2 안전한 대응 절차 ==&lt;br /&gt;
&lt;br /&gt;
# 콘솔 연결 후 장비를 재부팅하고 부팅 로그를 저장한다.&lt;br /&gt;
# 정확한 소프트웨어와 부트로더 버전을 기록한다.&lt;br /&gt;
# 패스워드 복구와 공장초기화 항목을 구분한다.&lt;br /&gt;
# 설정 보존 여부가 확인되지 않은 초기화 작업은 중단한다.&lt;br /&gt;
# 한드림넷 기술지원 또는 해당 버전 매뉴얼로 복구 절차를 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 11. 복구 후 공통 점검 =&lt;br /&gt;
&lt;br /&gt;
== 11.1 관리 계정 점검 ==&lt;br /&gt;
&lt;br /&gt;
* 새 관리자 계정으로 콘솔 로그인을 확인한다.&lt;br /&gt;
* SSH 로그인을 확인한다.&lt;br /&gt;
* Telnet이 불필요하면 비활성화한다.&lt;br /&gt;
* 기본 계정 또는 기본 패스워드가 남아 있는지 확인한다.&lt;br /&gt;
* RADIUS/TACACS+ 사용 장비는 로컬 비상 계정을 별도로 검증한다.&lt;br /&gt;
&lt;br /&gt;
== 11.2 네트워크 설정 점검 ==&lt;br /&gt;
&lt;br /&gt;
* 관리 IP 주소, 서브넷 마스크 및 기본 게이트웨이&lt;br /&gt;
* 관리 VLAN과 관리 포트&lt;br /&gt;
* VLAN 및 Trunk/Tagged/Untagged 설정&lt;br /&gt;
* STP 루트 및 차단 포트 상태&lt;br /&gt;
* LACP 또는 포트 채널 상태&lt;br /&gt;
* PoE 포트와 전력 공급 상태&lt;br /&gt;
* LLDP 및 음성 VLAN 상태&lt;br /&gt;
* SNMP, Syslog, NTP 및 인증 서버 설정&lt;br /&gt;
* 스택 또는 IRF/VSF 구성 상태&lt;br /&gt;
&lt;br /&gt;
== 11.3 최종 저장 및 재부팅 검증 ==&lt;br /&gt;
&lt;br /&gt;
# 변경 설정을 저장한다.&lt;br /&gt;
# 저장 설정에 신규 계정과 기존 네트워크 설정이 모두 존재하는지 확인한다.&lt;br /&gt;
# 유지보수 시간 내 장비를 재부팅한다.&lt;br /&gt;
# 신규 계정 로그인과 전체 포트 상태를 다시 확인한다.&lt;br /&gt;
# 장애 발생 시 비교할 수 있도록 복구 후 설정을 별도 백업한다.&lt;br /&gt;
&lt;br /&gt;
= 12. 현장 기록 양식 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목&lt;br /&gt;
! 기록&lt;br /&gt;
|-&lt;br /&gt;
| 작업 일시&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 작업자&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 제조사/모델&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 시리얼 번호&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 펌웨어 버전&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 부트로더 버전&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 기존 설정 백업 위치&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 사용한 복구 방식&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 설정 보존 여부&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 로그인 검증 결과&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 네트워크 검증 결과&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 13. 적용 범위 요약 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 벤더/계열&lt;br /&gt;
! 본 문서의 상세도&lt;br /&gt;
! 비고&lt;br /&gt;
|-&lt;br /&gt;
| Cisco Catalyst IOS&lt;br /&gt;
| 명령어 포함&lt;br /&gt;
| 2960/3560/3750 계열 대표 절차&lt;br /&gt;
|-&lt;br /&gt;
| Cisco Catalyst IOS XE&lt;br /&gt;
| 원칙만 기술&lt;br /&gt;
| 모델 및 버전별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| Alcatel OS6350-24&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| AOS 및 부트 환경별 공식 절차 필요&lt;br /&gt;
|-&lt;br /&gt;
| HPE ProCurve/ArubaOS-Switch&lt;br /&gt;
| 버튼 절차 포함&lt;br /&gt;
| front-panel-security 설정에 따라 제한 가능&lt;br /&gt;
|-&lt;br /&gt;
| HPE Comware&lt;br /&gt;
| 복구 흐름 기술&lt;br /&gt;
| BootWare 메뉴 번호는 버전별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| iPECS ES-3128GP&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 펌웨어별 공식 절차 필요&lt;br /&gt;
|-&lt;br /&gt;
| 유비쿼스 E4020-24T&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 소프트웨어 및 부트로더별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| 코어엣지 C3100-24PL&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 펌웨어 및 부트로더별 확인 필요&lt;br /&gt;
|-&lt;br /&gt;
| 한드림넷 SG2428G&lt;br /&gt;
| 안전 원칙만 기술&lt;br /&gt;
| 소프트웨어 및 부트로더별 확인 필요&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[분류:네트워크]]&lt;br /&gt;
[[분류:L2 스위치]]&lt;br /&gt;
[[분류:장애 대응]]&lt;br /&gt;
[[분류:패스워드 복구]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=Cisco_AP_ME&amp;diff=84</id>
		<title>Cisco AP ME</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=Cisco_AP_ME&amp;diff=84"/>
		<updated>2026-07-14T14:05:05Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: 새 문서: = Cisco Mobility Express(ME) 초기 설정 및 운영 가이드 =  == 개요 ==  본 문서는 Cisco Aironet 1832 Mobility Express 설치 완료 후 초기 설정 방법과 운영 시 권장되는 설정을 설명한다.  본 가이드는 AP 2대를 사용하는 소규모 사무실 환경을 기준으로 작성하였다.  == 구성 예시 ==  {| class=“wikitable” !항목 !설정 |- |AP1 |Mobility Express Master |- |AP2 |CAPWAP Join AP |- |SSID |Office |- |Guest SSID |Guest |...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cisco Mobility Express(ME) 초기 설정 및 운영 가이드 =&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
&lt;br /&gt;
본 문서는 Cisco Aironet 1832 Mobility Express 설치 완료 후 초기 설정&lt;br /&gt;
방법과 운영 시 권장되는 설정을 설명한다.&lt;br /&gt;
&lt;br /&gt;
본 가이드는 AP 2대를 사용하는 소규모 사무실 환경을 기준으로 작성하였다.&lt;br /&gt;
&lt;br /&gt;
== 구성 예시 ==&lt;br /&gt;
&lt;br /&gt;
{| class=“wikitable” !항목 !설정 |- |AP1 |Mobility Express Master |-&lt;br /&gt;
|AP2 |CAPWAP Join AP |- |SSID |Office |- |Guest SSID |Guest |- |관리&lt;br /&gt;
VLAN |10 |- |사내 무선 VLAN |20 |- |Guest VLAN |30 |}&lt;br /&gt;
&lt;br /&gt;
== 초기 Wizard 실행 ==&lt;br /&gt;
&lt;br /&gt;
브라우저 접속&lt;br /&gt;
&lt;br /&gt;
https://관리IP&lt;br /&gt;
&lt;br /&gt;
설정 순서&lt;br /&gt;
&lt;br /&gt;
국가(Country)&lt;br /&gt;
&lt;br /&gt;
시간대(Timezone)&lt;br /&gt;
&lt;br /&gt;
관리자 계정 생성&lt;br /&gt;
&lt;br /&gt;
Management IP 설정&lt;br /&gt;
&lt;br /&gt;
SSID 생성&lt;br /&gt;
&lt;br /&gt;
무선 암호 설정&lt;br /&gt;
&lt;br /&gt;
적용(Apply)&lt;br /&gt;
&lt;br /&gt;
== 관리자 계정 설정 ==&lt;br /&gt;
&lt;br /&gt;
-   admin 계정만 사용하지 않는다.&lt;br /&gt;
-   관리자 암호는 12자 이상 사용한다.&lt;br /&gt;
-   특수문자를 포함한다.&lt;br /&gt;
&lt;br /&gt;
== NTP 설정 ==&lt;br /&gt;
&lt;br /&gt;
{| class=“wikitable” !항목 !값 |- |NTP Server |time.google.com |- |예비&lt;br /&gt;
NTP |pool.ntp.org |- |Timezone |Asia/Seoul |}&lt;br /&gt;
&lt;br /&gt;
== Management Interface ==&lt;br /&gt;
&lt;br /&gt;
{| class=“wikitable” !항목 !설정 |- |Management VLAN |10 |- |Management&lt;br /&gt;
IP |고정 IP |- |Gateway |사내 Gateway |}&lt;br /&gt;
&lt;br /&gt;
== SSID 구성 ==&lt;br /&gt;
&lt;br /&gt;
=== Office ===&lt;br /&gt;
&lt;br /&gt;
{| class=“wikitable” !항목 !권장 |- |Security |WPA2/WPA3 Mixed |- |VLAN&lt;br /&gt;
|20 |}&lt;br /&gt;
&lt;br /&gt;
=== Guest ===&lt;br /&gt;
&lt;br /&gt;
{| class=“wikitable” !항목 !권장 |- |VLAN |30 |- |Client Isolation&lt;br /&gt;
|Enabled |}&lt;br /&gt;
&lt;br /&gt;
== 무선 보안 ==&lt;br /&gt;
&lt;br /&gt;
-   WPA2(AES) 사용&lt;br /&gt;
-   WPA3 지원 단말 사용&lt;br /&gt;
-   TKIP 비활성화&lt;br /&gt;
-   WPS 비활성화&lt;br /&gt;
&lt;br /&gt;
== RF 권장 설정 ==&lt;br /&gt;
&lt;br /&gt;
-   2.4GHz : Auto / 20MHz / Channel 1,6,11&lt;br /&gt;
-   5GHz : Auto / 80MHz / DFS Enabled&lt;br /&gt;
&lt;br /&gt;
== RRM ==&lt;br /&gt;
&lt;br /&gt;
-   Dynamic Channel Assignment : Enabled&lt;br /&gt;
-   Transmit Power Control : Enabled&lt;br /&gt;
-   Coverage Hole Detection : Enabled&lt;br /&gt;
&lt;br /&gt;
== Fast Roaming ==&lt;br /&gt;
&lt;br /&gt;
-   802.11k : Enabled&lt;br /&gt;
-   802.11v : Enabled&lt;br /&gt;
-   802.11r : 단말 호환성 확인 후 Enabled&lt;br /&gt;
&lt;br /&gt;
== Band Select ==&lt;br /&gt;
&lt;br /&gt;
Enabled 권장&lt;br /&gt;
&lt;br /&gt;
== Syslog ==&lt;br /&gt;
&lt;br /&gt;
{| class=“wikitable” !항목 !예시 |- |Server |192.168.10.20 |- |Protocol&lt;br /&gt;
|UDP/514 |}&lt;br /&gt;
&lt;br /&gt;
== 백업 ==&lt;br /&gt;
&lt;br /&gt;
다음 작업 전 반드시 설정을 백업한다.&lt;br /&gt;
&lt;br /&gt;
-   초기 구축 완료&lt;br /&gt;
-   설정 변경 전&lt;br /&gt;
-   펌웨어 업그레이드 전&lt;br /&gt;
&lt;br /&gt;
== 권장 펌웨어 ==&lt;br /&gt;
&lt;br /&gt;
{| class=“wikitable” !모델 !권장 버전 |- |Cisco Aironet 1832 Mobility&lt;br /&gt;
Express |8.10.196.0 |}&lt;br /&gt;
&lt;br /&gt;
== 운영 체크리스트 ==&lt;br /&gt;
&lt;br /&gt;
-   HTTPS 사용&lt;br /&gt;
-   HTTP 비활성화&lt;br /&gt;
-   SSH 활성화&lt;br /&gt;
-   Telnet 비활성화&lt;br /&gt;
-   NTP 정상&lt;br /&gt;
-   Syslog 연동&lt;br /&gt;
-   설정 백업&lt;br /&gt;
-   AP Join 확인&lt;br /&gt;
-   SSID 연결 확인&lt;br /&gt;
&lt;br /&gt;
== 장애 확인 ==&lt;br /&gt;
&lt;br /&gt;
=== AP Join 실패 ===&lt;br /&gt;
&lt;br /&gt;
-   VLAN 확인&lt;br /&gt;
-   DHCP 확인&lt;br /&gt;
-   Master AP 상태 확인&lt;br /&gt;
-   펌웨어 버전 확인&lt;br /&gt;
&lt;br /&gt;
=== 무선 속도 저하 ===&lt;br /&gt;
&lt;br /&gt;
-   채널 간섭&lt;br /&gt;
-   RSSI&lt;br /&gt;
-   2.4GHz 사용률&lt;br /&gt;
-   DFS 채널&lt;br /&gt;
-   AP CPU&lt;br /&gt;
&lt;br /&gt;
== 구축 권장 사항 ==&lt;br /&gt;
&lt;br /&gt;
-   AP는 천장 중앙 설치&lt;br /&gt;
-   AP 간 간섭 최소화&lt;br /&gt;
-   금속 구조물 근처 설치 지양&lt;br /&gt;
-   UPS 사용 권장&lt;br /&gt;
-   변경 후 설정 백업&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=MediaWiki_%EA%B6%8C%ED%95%9C&amp;diff=83</id>
		<title>MediaWiki 권한</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=MediaWiki_%EA%B6%8C%ED%95%9C&amp;diff=83"/>
		<updated>2026-07-13T14:11:40Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &amp;quot;MediaWiki 권한&amp;quot; 문서를 보호했습니다 ([편집=관리자만 허용] (무기한) [이동=관리자만 허용] (무기한))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MediaWiki 비공개 위키 및 사용자 그룹 권한 설정 가이드 =&lt;br /&gt;
&lt;br /&gt;
본 문서는 MediaWiki 1.46 기준으로 다음 권한 정책을 구성하는 방법을 설명한다.&lt;br /&gt;
&lt;br /&gt;
* 비로그인 사용자는 위키 문서를 열람할 수 없다.&lt;br /&gt;
* 로그인 사용자는 위키 문서를 열람할 수 있다.&lt;br /&gt;
* 문서 작성 및 편집은 별도의 사용자 그룹에 속한 사용자만 가능하다.&lt;br /&gt;
* 사용자 가입은 차단하고 관리자가 계정을 생성한다.&lt;br /&gt;
&lt;br /&gt;
== 1. 권한 구성 목표 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 사용자 구분&lt;br /&gt;
! 문서 열람&lt;br /&gt;
! 문서 작성·편집&lt;br /&gt;
! 계정 생성&lt;br /&gt;
|-&lt;br /&gt;
| 비로그인 사용자(&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 불가&lt;br /&gt;
| 불가&lt;br /&gt;
| 불가&lt;br /&gt;
|-&lt;br /&gt;
| 일반 로그인 사용자(&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 가능&lt;br /&gt;
| 불가&lt;br /&gt;
| 불가&lt;br /&gt;
|-&lt;br /&gt;
| 편집 그룹(&amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 가능&lt;br /&gt;
| 가능&lt;br /&gt;
| 불가&lt;br /&gt;
|-&lt;br /&gt;
| 관리자(&amp;lt;code&amp;gt;sysop&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 가능&lt;br /&gt;
| 가능&lt;br /&gt;
| 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;를 수정하기 전에 반드시 백업한다. PHP 문법 오류가 발생하면 위키 전체가 열리지 않을 수 있다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. LocalSettings.php 백업 ==&lt;br /&gt;
&lt;br /&gt;
MediaWiki 설치 경로가 &amp;lt;code&amp;gt;/var/www/mediawiki&amp;lt;/code&amp;gt;인 경우의 예시이다. 실제 설치 경로에 맞게 변경한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# MediaWiki 설치 경로로 이동&lt;br /&gt;
cd /var/www/mediawiki&lt;br /&gt;
&lt;br /&gt;
# 날짜와 시간을 붙여 LocalSettings.php 백업&lt;br /&gt;
cp -a LocalSettings.php &amp;quot;LocalSettings.php.$(date +%Y%m%d-%H%M%S).bak&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 백업 파일 확인&lt;br /&gt;
ls -lh LocalSettings.php*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. 비공개 위키 및 편집 그룹 설정 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;의 마지막 부분에 다음 설정을 추가한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------------&lt;br /&gt;
# 비공개 위키 권한 정책&lt;br /&gt;
# ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# 비로그인 사용자의 문서 열람 차단&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;read&#039;] = false;&lt;br /&gt;
&lt;br /&gt;
# 비로그인 사용자의 문서 작성 및 편집 차단&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;edit&#039;] = false;&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;createpage&#039;] = false;&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;createtalk&#039;] = false;&lt;br /&gt;
&lt;br /&gt;
# 공개 회원가입 차단&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;createaccount&#039;] = false;&lt;br /&gt;
&lt;br /&gt;
# 일반 로그인 사용자는 문서 열람만 허용&lt;br /&gt;
$wgGroupPermissions[&#039;user&#039;][&#039;read&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;user&#039;][&#039;edit&#039;] = false;&lt;br /&gt;
$wgGroupPermissions[&#039;user&#039;][&#039;createpage&#039;] = false;&lt;br /&gt;
$wgGroupPermissions[&#039;user&#039;][&#039;createtalk&#039;] = false;&lt;br /&gt;
&lt;br /&gt;
# 편집 전용 사용자 그룹 생성 및 권한 부여&lt;br /&gt;
$wgGroupPermissions[&#039;wiki-editor&#039;][&#039;read&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;wiki-editor&#039;][&#039;edit&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;wiki-editor&#039;][&#039;createpage&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;wiki-editor&#039;][&#039;createtalk&#039;] = true;&lt;br /&gt;
&lt;br /&gt;
# 관리자는 계정 생성과 문서 편집 가능&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;createaccount&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;read&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;edit&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;createpage&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;createtalk&#039;] = true;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt;는 기본 그룹이 아니라 이 설정에서 새로 정의한 사용자 그룹이다. 그룹 이름은 영문 소문자와 하이픈 조합을 권장한다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 로그인 화면 접근에 대한 참고 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; 권한을 차단해도 일반적으로 로그인 특수 문서는 접근할 수 있다. 환경 또는 확장 기능의 영향으로 로그인 화면까지 차단되는 경우에만 다음 예외를 추가한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
# 필요한 경우에만 비로그인 사용자에게 로그인 화면 열람 허용&lt;br /&gt;
$wgWhitelistRead = [ &#039;Special:UserLogin&#039; ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
기존에 &amp;lt;code&amp;gt;$wgWhitelistRead&amp;lt;/code&amp;gt; 설정이 있다면 새 배열을 다시 선언하지 말고 기존 배열에 항목을 합쳐야 한다.&lt;br /&gt;
&lt;br /&gt;
== 4. 설정 파일 문법 검사 및 적용 ==&lt;br /&gt;
&lt;br /&gt;
MediaWiki 권한 설정은 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;가 요청 시 로드되므로 별도의 DB 업데이트나 웹 서버 재시작이 일반적으로 필요하지 않다. 먼저 PHP 문법을 검사한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# PHP 문법 오류 확인&lt;br /&gt;
php -l /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
정상 결과:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
No syntax errors detected in /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHP OPcache 설정에 따라 변경 사항이 즉시 반영되지 않으면 PHP-FPM을 재시작한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 사용 중인 PHP-FPM 서비스 이름 확인&lt;br /&gt;
systemctl list-units --type=service | grep -E &#039;php.*fpm&#039;&lt;br /&gt;
&lt;br /&gt;
# Rocky Linux 기본 서비스 이름 예시&lt;br /&gt;
systemctl restart php-fpm&lt;br /&gt;
&lt;br /&gt;
# 서비스 상태 확인&lt;br /&gt;
systemctl --no-pager --full status php-fpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. 위키 사용자 계정 생성 ==&lt;br /&gt;
&lt;br /&gt;
공개 회원가입을 차단했으므로 관리자가 계정을 생성한다.&lt;br /&gt;
&lt;br /&gt;
# 관리자 계정으로 로그인한다.&lt;br /&gt;
# 주소창에서 &amp;lt;code&amp;gt;https://위키주소/index.php/Special:CreateAccount&amp;lt;/code&amp;gt;로 이동한다.&lt;br /&gt;
# 사용자 이름, 비밀번호, 이메일 주소를 입력한다.&lt;br /&gt;
# 가능하면 임시 비밀번호를 이메일로 전송하고 최초 로그인 시 변경하도록 한다.&lt;br /&gt;
&lt;br /&gt;
명령줄에서 계정을 생성해야 하는 경우 MediaWiki 설치 경로에서 유지보수 스크립트를 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# MediaWiki 설치 경로로 이동&lt;br /&gt;
cd /var/www/mediawiki&lt;br /&gt;
&lt;br /&gt;
# 현재 버전에 포함된 계정 생성 스크립트의 사용법 확인&lt;br /&gt;
php maintenance/createAndPromote.php --help&lt;br /&gt;
&lt;br /&gt;
# 일반 사용자 계정 생성 예시&lt;br /&gt;
# 실행 후 암호를 입력하며, 실제 사용자 이름으로 변경한다.&lt;br /&gt;
php maintenance/createAndPromote.php wikiuser01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
명령줄 옵션은 MediaWiki 버전에 따라 차이가 있을 수 있으므로 반드시 &amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt; 결과를 먼저 확인한다. 명령 기록에 비밀번호가 남지 않도록 비밀번호를 명령행 인수로 직접 입력하지 않는다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 사용자에게 편집 그룹 지정 ==&lt;br /&gt;
&lt;br /&gt;
=== 웹 관리 화면에서 지정 ===&lt;br /&gt;
&lt;br /&gt;
# 관리자 계정으로 로그인한다.&lt;br /&gt;
# &amp;lt;code&amp;gt;특수:사용자권한&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;Special:UserRights&amp;lt;/code&amp;gt;로 이동한다.&lt;br /&gt;
# 편집 권한을 부여할 사용자 이름을 입력하고 불러온다.&lt;br /&gt;
# 사용자 그룹 목록에서 &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt;를 선택한다.&lt;br /&gt;
# 변경 사유를 입력한다. 예: &amp;lt;code&amp;gt;기술 문서 편집 담당자 지정&amp;lt;/code&amp;gt;&lt;br /&gt;
# 사용자 그룹 저장 버튼을 누른다.&lt;br /&gt;
&lt;br /&gt;
직접 접근 주소 예시:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
https://위키주소/index.php/Special:UserRights&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 편집 권한 회수 ===&lt;br /&gt;
&lt;br /&gt;
동일한 &amp;lt;code&amp;gt;특수:사용자권한&amp;lt;/code&amp;gt; 화면에서 해당 사용자의 &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt; 선택을 해제하고 저장한다. 그룹을 제거해도 사용자 계정과 기존 편집 기록은 삭제되지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 7. 사용자 그룹 이름 한글 표시 ==&lt;br /&gt;
&lt;br /&gt;
권한 화면에서 그룹 이름을 보기 좋게 표시하려면 위키의 시스템 메시지를 생성한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 생성할 시스템 메시지 문서&lt;br /&gt;
! 입력 내용&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MediaWiki:Group-wiki-editor&amp;lt;/code&amp;gt;&lt;br /&gt;
| 문서 편집자&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MediaWiki:Group-wiki-editor-member&amp;lt;/code&amp;gt;&lt;br /&gt;
| 문서 편집자&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
각 문서는 관리자 계정으로 생성한다. 내부 그룹 ID는 계속 &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt;를 사용하며 화면에 표시되는 명칭만 변경된다.&lt;br /&gt;
&lt;br /&gt;
== 8. 권한 적용 확인 ==&lt;br /&gt;
&lt;br /&gt;
권한은 서로 다른 브라우저 또는 시크릿 창을 사용하여 계정 유형별로 검사한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 시험 항목&lt;br /&gt;
! 기대 결과&lt;br /&gt;
|-&lt;br /&gt;
| 로그아웃 상태에서 문서 주소 접속&lt;br /&gt;
| 문서 내용이 표시되지 않고 로그인 요구 또는 권한 오류 표시&lt;br /&gt;
|-&lt;br /&gt;
| 일반 사용자 로그인 후 문서 열람&lt;br /&gt;
| 문서 열람 가능&lt;br /&gt;
|-&lt;br /&gt;
| 일반 사용자의 문서 편집 시도&lt;br /&gt;
| 편집 불가&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt; 사용자 로그인 후 기존 문서 편집&lt;br /&gt;
| 편집 및 저장 가능&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt; 사용자의 새 문서 작성&lt;br /&gt;
| 새 문서 생성 가능&lt;br /&gt;
|-&lt;br /&gt;
| 관리자 계정의 사용자 계정 생성&lt;br /&gt;
| 계정 생성 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
현재 사용자에게 실제로 부여된 권한은 다음 특수 문서에서 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
https://위키주소/index.php/Special:ListGroupRights&lt;br /&gt;
https://위키주소/index.php/Special:UserRights&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. 첨부 파일 보안 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-error&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;중요:&#039;&#039;&#039; &amp;lt;code&amp;gt;$wgGroupPermissions[&#039;*&#039;][&#039;read&#039;] = false;&amp;lt;/code&amp;gt;는 위키 문서 열람을 제한하지만, 기본 구성에서는 업로드 파일의 직접 URL까지 보호하지 못한다. 파일 URL을 아는 외부 사용자가 이미지나 첨부 파일에 접근할 가능성이 있다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
첨부 파일도 비공개로 운영하려면 MediaWiki의 &amp;lt;code&amp;gt;img_auth.php&amp;lt;/code&amp;gt;와 웹 서버의 이미지 인증 구성을 별도로 적용해야 한다. Nginx 환경에서는 업로드 디렉터리를 직접 공개하지 않도록 구성한 뒤 내부 리다이렉트 방식으로 전달하는 구성이 필요하다. 문서 권한 설정만으로 첨부 파일까지 보호된다고 판단하면 안 된다.&lt;br /&gt;
&lt;br /&gt;
== 10. 장애 발생 시 복구 ==&lt;br /&gt;
&lt;br /&gt;
설정 추가 후 위키가 열리지 않으면 PHP 문법 오류 또는 변수 선언 오류를 우선 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# PHP 문법 확인&lt;br /&gt;
php -l /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&lt;br /&gt;
# Nginx 오류 로그 확인&lt;br /&gt;
tail -n 100 /var/log/nginx/error.log&lt;br /&gt;
&lt;br /&gt;
# PHP-FPM 로그 확인&lt;br /&gt;
journalctl -u php-fpm -n 100 --no-pager&lt;br /&gt;
&lt;br /&gt;
# 필요 시 백업 파일 목록 확인&lt;br /&gt;
ls -lt /var/www/mediawiki/LocalSettings.php*&lt;br /&gt;
&lt;br /&gt;
# 복구할 백업 파일을 확인한 뒤 원본으로 복원&lt;br /&gt;
# 아래 백업 파일명은 실제 생성된 이름으로 변경한다.&lt;br /&gt;
cp -a /var/www/mediawiki/LocalSettings.php.20260713-120000.bak \&lt;br /&gt;
      /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&lt;br /&gt;
# 복원 파일 문법 확인&lt;br /&gt;
php -l /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 11. 운영 권장 사항 ==&lt;br /&gt;
&lt;br /&gt;
* 일반 사용자에게 &amp;lt;code&amp;gt;sysop&amp;lt;/code&amp;gt; 권한을 부여하지 않고 편집 전용 그룹만 사용한다.&lt;br /&gt;
* 입사, 담당 변경, 퇴사 시 &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt; 그룹을 즉시 추가하거나 회수한다.&lt;br /&gt;
* 사용자 그룹 변경 시 변경 사유를 반드시 기록한다.&lt;br /&gt;
* 관리자 계정과 일반 편집 계정을 분리한다.&lt;br /&gt;
* 권한 설정 변경 전 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;와 데이터베이스를 백업한다.&lt;br /&gt;
* 비공개 자료가 첨부되는 경우 업로드 파일 직접 접근 차단을 별도로 검증한다.&lt;br /&gt;
&lt;br /&gt;
== 참고 자료 ==&lt;br /&gt;
&lt;br /&gt;
* MediaWiki 공식 문서: https://www.mediawiki.org/wiki/Manual:Preventing_access&lt;br /&gt;
* MediaWiki 공식 문서: https://www.mediawiki.org/wiki/Manual:User_rights&lt;br /&gt;
* MediaWiki 공식 문서: https://www.mediawiki.org/wiki/Manual:$wgGroupPermissions&lt;br /&gt;
* MediaWiki 공식 문서: https://www.mediawiki.org/wiki/Manual:Image_Authorization&lt;br /&gt;
&lt;br /&gt;
[[분류:MediaWiki]]&lt;br /&gt;
[[분류:서버 보안]]&lt;br /&gt;
[[분류:권한 관리]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=MediaWiki_%EA%B6%8C%ED%95%9C&amp;diff=82</id>
		<title>MediaWiki 권한</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=MediaWiki_%EA%B6%8C%ED%95%9C&amp;diff=82"/>
		<updated>2026-07-13T14:11:10Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: 새 문서: = MediaWiki 비공개 위키 및 사용자 그룹 권한 설정 가이드 =  본 문서는 MediaWiki 1.46 기준으로 다음 권한 정책을 구성하는 방법을 설명한다.  * 비로그인 사용자는 위키 문서를 열람할 수 없다. * 로그인 사용자는 위키 문서를 열람할 수 있다. * 문서 작성 및 편집은 별도의 사용자 그룹에 속한 사용자만 가능하다. * 사용자 가입은 차단하고 관리자가 계정을 생성한다.  == 1...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MediaWiki 비공개 위키 및 사용자 그룹 권한 설정 가이드 =&lt;br /&gt;
&lt;br /&gt;
본 문서는 MediaWiki 1.46 기준으로 다음 권한 정책을 구성하는 방법을 설명한다.&lt;br /&gt;
&lt;br /&gt;
* 비로그인 사용자는 위키 문서를 열람할 수 없다.&lt;br /&gt;
* 로그인 사용자는 위키 문서를 열람할 수 있다.&lt;br /&gt;
* 문서 작성 및 편집은 별도의 사용자 그룹에 속한 사용자만 가능하다.&lt;br /&gt;
* 사용자 가입은 차단하고 관리자가 계정을 생성한다.&lt;br /&gt;
&lt;br /&gt;
== 1. 권한 구성 목표 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 사용자 구분&lt;br /&gt;
! 문서 열람&lt;br /&gt;
! 문서 작성·편집&lt;br /&gt;
! 계정 생성&lt;br /&gt;
|-&lt;br /&gt;
| 비로그인 사용자(&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 불가&lt;br /&gt;
| 불가&lt;br /&gt;
| 불가&lt;br /&gt;
|-&lt;br /&gt;
| 일반 로그인 사용자(&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 가능&lt;br /&gt;
| 불가&lt;br /&gt;
| 불가&lt;br /&gt;
|-&lt;br /&gt;
| 편집 그룹(&amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 가능&lt;br /&gt;
| 가능&lt;br /&gt;
| 불가&lt;br /&gt;
|-&lt;br /&gt;
| 관리자(&amp;lt;code&amp;gt;sysop&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 가능&lt;br /&gt;
| 가능&lt;br /&gt;
| 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;주의:&#039;&#039;&#039; &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;를 수정하기 전에 반드시 백업한다. PHP 문법 오류가 발생하면 위키 전체가 열리지 않을 수 있다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. LocalSettings.php 백업 ==&lt;br /&gt;
&lt;br /&gt;
MediaWiki 설치 경로가 &amp;lt;code&amp;gt;/var/www/mediawiki&amp;lt;/code&amp;gt;인 경우의 예시이다. 실제 설치 경로에 맞게 변경한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# MediaWiki 설치 경로로 이동&lt;br /&gt;
cd /var/www/mediawiki&lt;br /&gt;
&lt;br /&gt;
# 날짜와 시간을 붙여 LocalSettings.php 백업&lt;br /&gt;
cp -a LocalSettings.php &amp;quot;LocalSettings.php.$(date +%Y%m%d-%H%M%S).bak&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 백업 파일 확인&lt;br /&gt;
ls -lh LocalSettings.php*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. 비공개 위키 및 편집 그룹 설정 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;의 마지막 부분에 다음 설정을 추가한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------------&lt;br /&gt;
# 비공개 위키 권한 정책&lt;br /&gt;
# ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# 비로그인 사용자의 문서 열람 차단&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;read&#039;] = false;&lt;br /&gt;
&lt;br /&gt;
# 비로그인 사용자의 문서 작성 및 편집 차단&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;edit&#039;] = false;&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;createpage&#039;] = false;&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;createtalk&#039;] = false;&lt;br /&gt;
&lt;br /&gt;
# 공개 회원가입 차단&lt;br /&gt;
$wgGroupPermissions[&#039;*&#039;][&#039;createaccount&#039;] = false;&lt;br /&gt;
&lt;br /&gt;
# 일반 로그인 사용자는 문서 열람만 허용&lt;br /&gt;
$wgGroupPermissions[&#039;user&#039;][&#039;read&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;user&#039;][&#039;edit&#039;] = false;&lt;br /&gt;
$wgGroupPermissions[&#039;user&#039;][&#039;createpage&#039;] = false;&lt;br /&gt;
$wgGroupPermissions[&#039;user&#039;][&#039;createtalk&#039;] = false;&lt;br /&gt;
&lt;br /&gt;
# 편집 전용 사용자 그룹 생성 및 권한 부여&lt;br /&gt;
$wgGroupPermissions[&#039;wiki-editor&#039;][&#039;read&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;wiki-editor&#039;][&#039;edit&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;wiki-editor&#039;][&#039;createpage&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;wiki-editor&#039;][&#039;createtalk&#039;] = true;&lt;br /&gt;
&lt;br /&gt;
# 관리자는 계정 생성과 문서 편집 가능&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;createaccount&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;read&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;edit&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;createpage&#039;] = true;&lt;br /&gt;
$wgGroupPermissions[&#039;sysop&#039;][&#039;createtalk&#039;] = true;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt;는 기본 그룹이 아니라 이 설정에서 새로 정의한 사용자 그룹이다. 그룹 이름은 영문 소문자와 하이픈 조합을 권장한다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 로그인 화면 접근에 대한 참고 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; 권한을 차단해도 일반적으로 로그인 특수 문서는 접근할 수 있다. 환경 또는 확장 기능의 영향으로 로그인 화면까지 차단되는 경우에만 다음 예외를 추가한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
# 필요한 경우에만 비로그인 사용자에게 로그인 화면 열람 허용&lt;br /&gt;
$wgWhitelistRead = [ &#039;Special:UserLogin&#039; ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
기존에 &amp;lt;code&amp;gt;$wgWhitelistRead&amp;lt;/code&amp;gt; 설정이 있다면 새 배열을 다시 선언하지 말고 기존 배열에 항목을 합쳐야 한다.&lt;br /&gt;
&lt;br /&gt;
== 4. 설정 파일 문법 검사 및 적용 ==&lt;br /&gt;
&lt;br /&gt;
MediaWiki 권한 설정은 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;가 요청 시 로드되므로 별도의 DB 업데이트나 웹 서버 재시작이 일반적으로 필요하지 않다. 먼저 PHP 문법을 검사한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# PHP 문법 오류 확인&lt;br /&gt;
php -l /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
정상 결과:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
No syntax errors detected in /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHP OPcache 설정에 따라 변경 사항이 즉시 반영되지 않으면 PHP-FPM을 재시작한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 사용 중인 PHP-FPM 서비스 이름 확인&lt;br /&gt;
systemctl list-units --type=service | grep -E &#039;php.*fpm&#039;&lt;br /&gt;
&lt;br /&gt;
# Rocky Linux 기본 서비스 이름 예시&lt;br /&gt;
systemctl restart php-fpm&lt;br /&gt;
&lt;br /&gt;
# 서비스 상태 확인&lt;br /&gt;
systemctl --no-pager --full status php-fpm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. 위키 사용자 계정 생성 ==&lt;br /&gt;
&lt;br /&gt;
공개 회원가입을 차단했으므로 관리자가 계정을 생성한다.&lt;br /&gt;
&lt;br /&gt;
# 관리자 계정으로 로그인한다.&lt;br /&gt;
# 주소창에서 &amp;lt;code&amp;gt;https://위키주소/index.php/Special:CreateAccount&amp;lt;/code&amp;gt;로 이동한다.&lt;br /&gt;
# 사용자 이름, 비밀번호, 이메일 주소를 입력한다.&lt;br /&gt;
# 가능하면 임시 비밀번호를 이메일로 전송하고 최초 로그인 시 변경하도록 한다.&lt;br /&gt;
&lt;br /&gt;
명령줄에서 계정을 생성해야 하는 경우 MediaWiki 설치 경로에서 유지보수 스크립트를 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# MediaWiki 설치 경로로 이동&lt;br /&gt;
cd /var/www/mediawiki&lt;br /&gt;
&lt;br /&gt;
# 현재 버전에 포함된 계정 생성 스크립트의 사용법 확인&lt;br /&gt;
php maintenance/createAndPromote.php --help&lt;br /&gt;
&lt;br /&gt;
# 일반 사용자 계정 생성 예시&lt;br /&gt;
# 실행 후 암호를 입력하며, 실제 사용자 이름으로 변경한다.&lt;br /&gt;
php maintenance/createAndPromote.php wikiuser01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-warning&amp;quot;&amp;gt;&lt;br /&gt;
명령줄 옵션은 MediaWiki 버전에 따라 차이가 있을 수 있으므로 반드시 &amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt; 결과를 먼저 확인한다. 명령 기록에 비밀번호가 남지 않도록 비밀번호를 명령행 인수로 직접 입력하지 않는다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 사용자에게 편집 그룹 지정 ==&lt;br /&gt;
&lt;br /&gt;
=== 웹 관리 화면에서 지정 ===&lt;br /&gt;
&lt;br /&gt;
# 관리자 계정으로 로그인한다.&lt;br /&gt;
# &amp;lt;code&amp;gt;특수:사용자권한&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;Special:UserRights&amp;lt;/code&amp;gt;로 이동한다.&lt;br /&gt;
# 편집 권한을 부여할 사용자 이름을 입력하고 불러온다.&lt;br /&gt;
# 사용자 그룹 목록에서 &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt;를 선택한다.&lt;br /&gt;
# 변경 사유를 입력한다. 예: &amp;lt;code&amp;gt;기술 문서 편집 담당자 지정&amp;lt;/code&amp;gt;&lt;br /&gt;
# 사용자 그룹 저장 버튼을 누른다.&lt;br /&gt;
&lt;br /&gt;
직접 접근 주소 예시:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
https://위키주소/index.php/Special:UserRights&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 편집 권한 회수 ===&lt;br /&gt;
&lt;br /&gt;
동일한 &amp;lt;code&amp;gt;특수:사용자권한&amp;lt;/code&amp;gt; 화면에서 해당 사용자의 &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt; 선택을 해제하고 저장한다. 그룹을 제거해도 사용자 계정과 기존 편집 기록은 삭제되지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 7. 사용자 그룹 이름 한글 표시 ==&lt;br /&gt;
&lt;br /&gt;
권한 화면에서 그룹 이름을 보기 좋게 표시하려면 위키의 시스템 메시지를 생성한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 생성할 시스템 메시지 문서&lt;br /&gt;
! 입력 내용&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MediaWiki:Group-wiki-editor&amp;lt;/code&amp;gt;&lt;br /&gt;
| 문서 편집자&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MediaWiki:Group-wiki-editor-member&amp;lt;/code&amp;gt;&lt;br /&gt;
| 문서 편집자&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
각 문서는 관리자 계정으로 생성한다. 내부 그룹 ID는 계속 &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt;를 사용하며 화면에 표시되는 명칭만 변경된다.&lt;br /&gt;
&lt;br /&gt;
== 8. 권한 적용 확인 ==&lt;br /&gt;
&lt;br /&gt;
권한은 서로 다른 브라우저 또는 시크릿 창을 사용하여 계정 유형별로 검사한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 시험 항목&lt;br /&gt;
! 기대 결과&lt;br /&gt;
|-&lt;br /&gt;
| 로그아웃 상태에서 문서 주소 접속&lt;br /&gt;
| 문서 내용이 표시되지 않고 로그인 요구 또는 권한 오류 표시&lt;br /&gt;
|-&lt;br /&gt;
| 일반 사용자 로그인 후 문서 열람&lt;br /&gt;
| 문서 열람 가능&lt;br /&gt;
|-&lt;br /&gt;
| 일반 사용자의 문서 편집 시도&lt;br /&gt;
| 편집 불가&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt; 사용자 로그인 후 기존 문서 편집&lt;br /&gt;
| 편집 및 저장 가능&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt; 사용자의 새 문서 작성&lt;br /&gt;
| 새 문서 생성 가능&lt;br /&gt;
|-&lt;br /&gt;
| 관리자 계정의 사용자 계정 생성&lt;br /&gt;
| 계정 생성 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
현재 사용자에게 실제로 부여된 권한은 다음 특수 문서에서 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
https://위키주소/index.php/Special:ListGroupRights&lt;br /&gt;
https://위키주소/index.php/Special:UserRights&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. 첨부 파일 보안 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-message-box mw-message-box-error&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;중요:&#039;&#039;&#039; &amp;lt;code&amp;gt;$wgGroupPermissions[&#039;*&#039;][&#039;read&#039;] = false;&amp;lt;/code&amp;gt;는 위키 문서 열람을 제한하지만, 기본 구성에서는 업로드 파일의 직접 URL까지 보호하지 못한다. 파일 URL을 아는 외부 사용자가 이미지나 첨부 파일에 접근할 가능성이 있다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
첨부 파일도 비공개로 운영하려면 MediaWiki의 &amp;lt;code&amp;gt;img_auth.php&amp;lt;/code&amp;gt;와 웹 서버의 이미지 인증 구성을 별도로 적용해야 한다. Nginx 환경에서는 업로드 디렉터리를 직접 공개하지 않도록 구성한 뒤 내부 리다이렉트 방식으로 전달하는 구성이 필요하다. 문서 권한 설정만으로 첨부 파일까지 보호된다고 판단하면 안 된다.&lt;br /&gt;
&lt;br /&gt;
== 10. 장애 발생 시 복구 ==&lt;br /&gt;
&lt;br /&gt;
설정 추가 후 위키가 열리지 않으면 PHP 문법 오류 또는 변수 선언 오류를 우선 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# PHP 문법 확인&lt;br /&gt;
php -l /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&lt;br /&gt;
# Nginx 오류 로그 확인&lt;br /&gt;
tail -n 100 /var/log/nginx/error.log&lt;br /&gt;
&lt;br /&gt;
# PHP-FPM 로그 확인&lt;br /&gt;
journalctl -u php-fpm -n 100 --no-pager&lt;br /&gt;
&lt;br /&gt;
# 필요 시 백업 파일 목록 확인&lt;br /&gt;
ls -lt /var/www/mediawiki/LocalSettings.php*&lt;br /&gt;
&lt;br /&gt;
# 복구할 백업 파일을 확인한 뒤 원본으로 복원&lt;br /&gt;
# 아래 백업 파일명은 실제 생성된 이름으로 변경한다.&lt;br /&gt;
cp -a /var/www/mediawiki/LocalSettings.php.20260713-120000.bak \&lt;br /&gt;
      /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&lt;br /&gt;
# 복원 파일 문법 확인&lt;br /&gt;
php -l /var/www/mediawiki/LocalSettings.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 11. 운영 권장 사항 ==&lt;br /&gt;
&lt;br /&gt;
* 일반 사용자에게 &amp;lt;code&amp;gt;sysop&amp;lt;/code&amp;gt; 권한을 부여하지 않고 편집 전용 그룹만 사용한다.&lt;br /&gt;
* 입사, 담당 변경, 퇴사 시 &amp;lt;code&amp;gt;wiki-editor&amp;lt;/code&amp;gt; 그룹을 즉시 추가하거나 회수한다.&lt;br /&gt;
* 사용자 그룹 변경 시 변경 사유를 반드시 기록한다.&lt;br /&gt;
* 관리자 계정과 일반 편집 계정을 분리한다.&lt;br /&gt;
* 권한 설정 변경 전 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;와 데이터베이스를 백업한다.&lt;br /&gt;
* 비공개 자료가 첨부되는 경우 업로드 파일 직접 접근 차단을 별도로 검증한다.&lt;br /&gt;
&lt;br /&gt;
== 참고 자료 ==&lt;br /&gt;
&lt;br /&gt;
* MediaWiki 공식 문서: https://www.mediawiki.org/wiki/Manual:Preventing_access&lt;br /&gt;
* MediaWiki 공식 문서: https://www.mediawiki.org/wiki/Manual:User_rights&lt;br /&gt;
* MediaWiki 공식 문서: https://www.mediawiki.org/wiki/Manual:$wgGroupPermissions&lt;br /&gt;
* MediaWiki 공식 문서: https://www.mediawiki.org/wiki/Manual:Image_Authorization&lt;br /&gt;
&lt;br /&gt;
[[분류:MediaWiki]]&lt;br /&gt;
[[분류:서버 보안]]&lt;br /&gt;
[[분류:권한 관리]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=81</id>
		<title>대문</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=81"/>
		<updated>2026-07-13T13:55:06Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이곳은 일부 지인에게 공유하기 위하여 생성된 위키 입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[파일:134896534 p0.png|없음|섬네일|1024x1024픽셀]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:134896534_p0.png&amp;diff=80</id>
		<title>파일:134896534 p0.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:134896534_p0.png&amp;diff=80"/>
		<updated>2026-07-13T13:54:34Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;짤방&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=IPECS-UCP&amp;diff=79</id>
		<title>IPECS-UCP</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=IPECS-UCP&amp;diff=79"/>
		<updated>2026-07-13T13:29:35Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: 스샷 왼쪽 정렬&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iPECS UCP 주장치 개통 가이드}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;wiki-notice&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;적용 대상&#039;&#039;&#039; : iPECS UCP 계열 / Unified 주장치 프로그램 Issue 2.2 / SW 6.2.x 기준&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;문서 목적&#039;&#039;&#039; : 신규 설치 또는 교체 현장에서 기본 시스템, 내선, 국선, DID, PRI·R2·SIP 및 LCR을 순서대로 개통하기 위한 실무 절차&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;주의&#039;&#039;&#039; : 모델, 라이선스, 소프트웨어 버전 및 통신사업자 제공 조건에 따라 화면과 선택 항목이 달라질 수 있다. 특히 E1 PRI와 R2 MFC의 시그널링 값은 반드시 회선 개통내역서와 대조한다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= 1. 작업 전 준비 =&lt;br /&gt;
&lt;br /&gt;
== 1.1 준비 자료 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분 !! 준비할 정보 !! 확인처&lt;br /&gt;
|-&lt;br /&gt;
| 시스템 || UCP 모델, SW 버전, 라이선스 파일, 주장치 IP, 게이트웨이, 서브넷 || 장비 및 구축 설계서&lt;br /&gt;
|-&lt;br /&gt;
| 내선 || 내선번호, 사용자명, 단말 종류, MAC 주소, 서비스 등급 || 내선번호 계획표&lt;br /&gt;
|-&lt;br /&gt;
| 국선 || 국선 종류, 채널 수, 국선 그룹, 발신 허용 내선 || 통신 구성표&lt;br /&gt;
|-&lt;br /&gt;
| E1 PRI || 회선 역할, 프레이밍, 라인코드, CRC, Clock, D채널, DID 자릿수, 발신번호 정책 || 통신사업자 개통내역서&lt;br /&gt;
|-&lt;br /&gt;
| R2 MFC || E1 회선 조건, 수신 DID 자릿수, CLI 요청 자릿수, DNIS/ANI, Category || 통신사업자 개통내역서&lt;br /&gt;
|-&lt;br /&gt;
| SIP || Proxy/Registrar, 도메인, 포트, 전송방식, 계정, 비밀번호, DID, 코덱 || SIP 사업자 개통내역서&lt;br /&gt;
|-&lt;br /&gt;
| 라우팅 || 대표번호, DID-내선 매핑, 주/야간 착신처, LCR 비교·변환 규칙 || 번호 라우팅 설계서&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 1.2 위험 작업 및 백업 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:2px solid #c62828; background:#ffebee; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&#039;&#039;&#039;경고:&#039;&#039;&#039; 초기화, 장치 포트 수 변경, 데이터베이스 업로드, 펌웨어 적용 및 시스템 리셋은 통화 중단을 발생시킬 수 있다. 서비스 시간 외 작업하고 현재 데이터베이스를 먼저 내려받는다.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 웹 관리자에서 &#039;&#039;&#039;유지보수 → 데이터베이스 관리&#039;&#039;&#039;로 이동한다.&lt;br /&gt;
# 전체 데이터베이스를 선택하여 PC에 다운로드한다.&lt;br /&gt;
# 파일명에 사이트명, 장비명, SW 버전, 백업 일자를 포함한다.&lt;br /&gt;
# 복구에 사용할 관리자 계정과 암호를 별도 보관한다.&lt;br /&gt;
# 변경 전후 백업을 각각 보관한다.&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_366_database_management.png|1200px|thumb|데이터베이스 관리 화면|없음]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;권장 파일명 예시&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 변경 전 데이터베이스 백업 파일&lt;br /&gt;
SITE_UCP2400_SW6.2_before_20260713.db&lt;br /&gt;
&lt;br /&gt;
# 개통 완료 후 데이터베이스 백업 파일&lt;br /&gt;
SITE_UCP2400_SW6.2_after_20260713.db&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 2. 권장 개통 순서 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 순서 !! 작업 !! 관련 프로그램 !! 완료 기준&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 백업, 버전·라이선스 확인 || 유지보수, 시스템 개요 || 복구 파일과 라이선스 확보&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 시스템 ID, 번호체계, 시간 설정 || PGM 100, 106~109, 178, 195 || 국가 코드와 다이얼 플랜 확정&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 시스템·장치 IP 및 장치 등록 || PGM 101~103 || 보드와 단말 등록 정상&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 내선 번호·종류·권한 설정 || PGM 105, 110~117 || 내선 상호통화 정상&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 국선 보드와 국선 그룹 설정 || PGM 131~145 || 채널 상태 정상, 국선 그룹 점유 가능&lt;br /&gt;
|-&lt;br /&gt;
| 6 || PRI/R2/SIP 세부 설정 || PGM 131, 133, 143, 151, 153, 200~202, 210 || 신호·등록 상태 정상&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 대표번호·DID 착신 설정 || PGM 144, 145, 167, 202, 231 || 번호별 지정 목적지 착신&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 내선 그룹·교환수 설정 || PGM 164, 190, 191 || 대표·그룹 호출 정상&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 발신권한·LCR 설정 || PGM 116, 117, 220~224 || 내선 등급별 발신 정상&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 주·야간, 장애·복구 시험 || 관련 PGM 및 상태 화면 || 시험표 전 항목 통과&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 3. 접속과 설치 마법사 =&lt;br /&gt;
&lt;br /&gt;
== 3.1 웹 관리자 접속 ==&lt;br /&gt;
&lt;br /&gt;
# 작업 PC를 주장치 관리망에 연결한다.&lt;br /&gt;
# UCP 관리 IP로 웹 브라우저를 접속한다.&lt;br /&gt;
# 유지보수 권한 계정으로 로그인한다.&lt;br /&gt;
# 최초 접속이면 기본 계정 사용 후 즉시 별도 유지보수 계정과 강력한 암호를 등록한다.&lt;br /&gt;
# 접속 후 시스템 모델, SW 버전, 라이선스 상태를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:2px solid #c62828; background:#ffebee; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&#039;&#039;&#039;경고:&#039;&#039;&#039; 매뉴얼에 기재된 초기 계정과 암호를 운영 상태로 방치하지 않는다. 관리 페이지는 관리 VLAN 또는 허용된 관리 IP에서만 접근하도록 제한한다.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3.2 설치 마법사 ==&lt;br /&gt;
&lt;br /&gt;
설치 마법사는 초기 구축 시 기본 항목을 순차 설정할 수 있다. 기존 운영 장비에서는 현재 데이터를 덮어쓸 수 있으므로 개별 PGM 방식이 안전하다.&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_020_install_wizard.png|1200px|thumb|설치 마법사 화면|없음]]&lt;br /&gt;
&lt;br /&gt;
매뉴얼 기준 설치 마법사의 주요 단계는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
# 라이선스와 시스템 기본정보 확인&lt;br /&gt;
# 시스템 시간과 날짜 설정&lt;br /&gt;
# 내선번호 설정&lt;br /&gt;
# 국선 그룹 점유 코드, 교환수 호출 및 대리응답 코드 확인&lt;br /&gt;
# 유지보수 계정 등록&lt;br /&gt;
# 라이선스 파일 업로드&lt;br /&gt;
&lt;br /&gt;
= 4. 시스템 기본 설정 =&lt;br /&gt;
&lt;br /&gt;
== 4.1 시스템 ID와 국가 코드 - PGM 100 ==&lt;br /&gt;
&lt;br /&gt;
메뉴 경로는 &#039;&#039;&#039;시스템 ID &amp;amp; 번호 체계 → 시스템 ID(100)&#039;&#039;&#039;이다.&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_038_pgm100_system_id.png|1200px|thumb|PGM 100 시스템 ID|없음]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 권장 작업 !! 확인 사항&lt;br /&gt;
|-&lt;br /&gt;
| 국가 코드 || 대한민국 적용 여부 확인 || 국가 코드 변경 시 번호체계와 기본값이 함께 바뀔 수 있음&lt;br /&gt;
|-&lt;br /&gt;
| 사이트 이름 || 현장 또는 고객사 식별명 입력 || 장애 알람과 관리 화면에서 구분 가능한 이름 사용&lt;br /&gt;
|-&lt;br /&gt;
| 지역 코드 || 실제 지역번호에 맞게 입력 || 발신번호 가공 정책과 함께 확인&lt;br /&gt;
|-&lt;br /&gt;
| 번호체계 || 국내 기본 번호체계를 기준으로 설계값 확인 || 기존 번호와 기능 코드 충돌 금지&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UCP에서 번호체계를 변경할 때는 국가 코드 변경용 DIP 스위치 상태를 매뉴얼과 장비 상태에 맞춰 확인한다. 변경 후에는 내선번호, 국선 점유코드 및 기능코드가 의도대로 유지됐는지 반드시 다시 조회한다.&lt;br /&gt;
&lt;br /&gt;
== 4.2 장치 포트 수 - PGM 101 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_043_pgm101_device_ports.png|1200px|thumb|PGM 101 장치 포트 수 변경|없음]]&lt;br /&gt;
&lt;br /&gt;
# 시스템 개요에서 라이선스별 최대 포트 수를 확인한다.&lt;br /&gt;
# PGM 101에서 필요한 장치 종류와 새 포트 수를 입력한다.&lt;br /&gt;
# 등록 또는 저장 후 시스템 재시작 필요 여부를 확인한다.&lt;br /&gt;
# 재시작 후 현재 포트 수와 등록 장치 수가 일치하는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #ef6c00; background:#fff3e0; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&#039;&#039;&#039;주의:&#039;&#039;&#039; 장치 포트 수 변경은 시스템 재시작 후 적용되는 항목이 포함된다. 서비스 중 임의 변경하지 않는다.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.3 시스템 IP 주소 - PGM 102 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_045_pgm102_system_ip.png|1200px|thumb|PGM 102 시스템 IP 주소|없음]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 설정 예시 !! 확인 포인트&lt;br /&gt;
|-&lt;br /&gt;
| 시스템 IP || 192.168.10.10 || 다른 장비와 중복되지 않는 고정 IP&lt;br /&gt;
|-&lt;br /&gt;
| 서브넷 마스크 || 255.255.255.0 || 음성·관리망 설계와 일치&lt;br /&gt;
|-&lt;br /&gt;
| 기본 라우터 || 192.168.10.1 || 원격 단말 또는 SIP 사업자망 경로 확인&lt;br /&gt;
|-&lt;br /&gt;
| 부 시스템 IP || 필요 시에만 사용 || 이중망 설계가 없으면 임의 입력 금지&lt;br /&gt;
|-&lt;br /&gt;
| 자동 IP 할당 || 현장 설계에 따라 결정 || DHCP 또는 장치 자동할당 범위 중복 확인&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IP 변경 전 현재 접속 IP, 변경 IP, 작업 PC의 임시 IP를 기록한다. 저장 후 관리 세션이 끊어지면 작업 PC 주소를 새 관리망으로 변경하여 재접속한다.&lt;br /&gt;
&lt;br /&gt;
== 4.4 장치 IP와 등록 - PGM 103 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_047_pgm103_device_ip.png|1200px|thumb|PGM 103 장치 IP 주소와 등록 상태|없음]]&lt;br /&gt;
&lt;br /&gt;
PGM 103에서는 보드·게이트웨이·IP 단말의 순번, IP, MAC 및 등록 상태를 확인한다.&lt;br /&gt;
&lt;br /&gt;
* 로컬 장치는 동일 LAN의 멀티캐스트 등록이 가능한지 확인한다.&lt;br /&gt;
* 원격 장치는 MAC 주소를 미리 등록하고 라우팅·NAT·방화벽 조건을 확인한다.&lt;br /&gt;
* 장치 교체 시 기존 순번과 내선 매핑을 유지해야 하는지 먼저 결정한다.&lt;br /&gt;
* 등록 실패 시 시스템 IP, 장치의 시스템 주소, VLAN, 게이트웨이, MAC 오입력을 우선 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 4.5 내선번호 - PGM 105 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_049_pgm105_extension_number.png|1200px|thumb|PGM 105 내선번호|없음]]&lt;br /&gt;
&lt;br /&gt;
UCP는 등록 시 기본적으로 4자리 내선번호를 할당한다. PGM 105에서 실제 번호계획에 맞게 변경한다.&lt;br /&gt;
&lt;br /&gt;
# 번호 변경 전 단말 순번과 기존 내선번호를 내보내거나 기록한다.&lt;br /&gt;
# 변경 대상 범위를 조회한다.&lt;br /&gt;
# 새 내선번호를 입력하고 저장한다.&lt;br /&gt;
# 내선 상호 호출, 발신자 표시, DSS/BLF 키 및 그룹 구성원이 새 번호로 연동되는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 4.6 번호체계 - PGM 106~109 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_050_pgm106_numbering_plan.png|1200px|thumb|PGM 106~109 번호체계|없음]]&lt;br /&gt;
&lt;br /&gt;
필수 확인 코드는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 기능 !! 매뉴얼 기본 예 !! 현장 확인&lt;br /&gt;
|-&lt;br /&gt;
| 첫 번째 국선 그룹 점유 || 9 || 내선번호 또는 지역번호와 충돌 여부&lt;br /&gt;
|-&lt;br /&gt;
| 국선 그룹 사용 || 89 || 뒤에 입력할 국선 그룹 번호 체계 확인&lt;br /&gt;
|-&lt;br /&gt;
| 교환수 호출 || 시스템 설정값 확인 || 대표 교환수 내선과 연동&lt;br /&gt;
|-&lt;br /&gt;
| 대리응답 || 시스템 설정값 확인 || 대리응답 그룹 시험&lt;br /&gt;
|-&lt;br /&gt;
| 비상전화 || 별도 비상전화 테이블과 연동 || 112·119 등은 발신제한 예외 처리&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 5. 내선 설정 =&lt;br /&gt;
&lt;br /&gt;
== 5.1 내선 종류 - PGM 110 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_055_pgm110_station_type.png|1200px|thumb|PGM 110 내선 종류|없음]]&lt;br /&gt;
&lt;br /&gt;
단말 종류가 실제 연결 방식과 일치하는지 확인한다. 일반전화기, 디지털 키폰, IP 단말 및 SIP 단말은 등록과 기능 제공 방식이 다르다. FAX나 모뎀을 연결하는 SLT는 음성용 내선과 동일하게 일괄 설정하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 5.2 내선 서비스 등급 - PGM 116 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_074_pgm116_cos.png|1200px|thumb|PGM 116 내선 서비스 등급|없음]]&lt;br /&gt;
&lt;br /&gt;
내선별 주간·야간 서비스 등급을 지정한다. 서비스 등급 번호 자체만 지정해서는 발신 제한이 완성되지 않으며 PGM 224의 허용·거부 테이블과 함께 설계해야 한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;권장 등급 예시&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 등급 !! 대상 !! 허용 범위&lt;br /&gt;
|-&lt;br /&gt;
| COS 1 || 교환수·관리자 || 국내·국제·휴대전화, 업무상 필요한 전체 발신&lt;br /&gt;
|-&lt;br /&gt;
| COS 2 || 일반 사무실 || 시내·시외·휴대전화, 국제전화 제한&lt;br /&gt;
|-&lt;br /&gt;
| COS 3 || 공용·회의실 || 시내 또는 지정번호만 허용&lt;br /&gt;
|-&lt;br /&gt;
| COS 4 || FAX·설비 || 지정된 번호 유형만 허용&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 5.3 국선/IP 그룹 지정 - PGM 117 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_076_pgm117_co_group_access.png|1200px|thumb|PGM 117 국선/IP 그룹 지정|없음]]&lt;br /&gt;
&lt;br /&gt;
이 화면에서 각 내선이 사용할 수 있는 국선 그룹을 지정한다.&lt;br /&gt;
&lt;br /&gt;
# 일반 사용자, 교환수, FAX 및 임원 등 역할별 허용 국선 그룹을 먼저 정한다.&lt;br /&gt;
# 내선 범위를 조회한다.&lt;br /&gt;
# 사용할 국선 그룹만 허용한다.&lt;br /&gt;
# 주간·야간 정책이 다르면 양쪽을 각각 확인한다.&lt;br /&gt;
# 허용 내선과 차단 내선에서 실제 국선 점유 시험을 한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;자주 발생하는 증상&#039;&#039;&#039; : 국선은 정상인데 특정 내선만 발신되지 않으면 PGM 117 그룹 접근권한과 PGM 116/224 발신등급을 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 6. 국선 보드와 공통 설정 =&lt;br /&gt;
&lt;br /&gt;
== 6.1 T1/E1/PRI 보드 - PGM 131 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_102_pgm131_e1_pri.png|1200px|thumb|PGM 131 T1/E1/PRI 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
PGM 131은 E1/PRI 물리·링크 조건을 설정하는 핵심 화면이다. 적용값은 회선 개통내역서를 기준으로 한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 일반적인 국내 E1 PRI 검토값 !! 주의&lt;br /&gt;
|-&lt;br /&gt;
| 인터페이스 || E1/PRI || T1과 혼동 금지&lt;br /&gt;
|-&lt;br /&gt;
| 프레이밍 || 회선사 제공값 || CRC4 사용 여부 포함&lt;br /&gt;
|-&lt;br /&gt;
| 라인 코드 || HDB3 여부 확인 || 회선사와 불일치 시 동기 불가&lt;br /&gt;
|-&lt;br /&gt;
| Clock || 통신망 수신 Clock 기준 여부 확인 || 양단이 모두 Master 또는 모두 Slave가 되지 않게 구성&lt;br /&gt;
|-&lt;br /&gt;
| 시그널링 || PRI 또는 R2 || 보드와 라이선스 지원 여부 확인&lt;br /&gt;
|-&lt;br /&gt;
| D채널 || 사업자 지정 채널 || 일반적인 관행만으로 단정하지 말 것&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 6.2 보드 기본 특성 - PGM 132 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_103_pgm132_board.png|1200px|thumb|PGM 132 보드 기본 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
보드 순번, 장치 IP, 게이트웨이 연결상태, Web/Telnet 허용 여부 등 보드 전체에 적용되는 값을 확인한다. 관리 목적이 아니라면 불필요한 원격 관리 접근은 허용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 6.3 국선 개요와 국선 공통 특성 - PGM 140 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_106_co_overview.png|1200px|thumb|국선 개요|없음]]&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_107_pgm140_co_common.png|1200px|thumb|PGM 140 국선 공통 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
국선 개요에서 보드 유형, 국선 유형, 포트 및 국선 그룹을 확인한 뒤 PGM 140에서 다음을 지정한다.&lt;br /&gt;
&lt;br /&gt;
* 국선 사용 여부&lt;br /&gt;
* 국선 종류: Normal, DID, TIE 또는 사용 안 함&lt;br /&gt;
* 국선 그룹 번호&lt;br /&gt;
* 점유 방향과 순서&lt;br /&gt;
* ICLID/CID 처리&lt;br /&gt;
* LCR 적용용 LDT 테이블&lt;br /&gt;
&lt;br /&gt;
채널별 설정이 다르면 동일 회선의 일부 채널만 발신 또는 착신 실패할 수 있으므로 범위 조회 후 전 채널 값을 비교한다.&lt;br /&gt;
&lt;br /&gt;
= 7. E1 PRI 개통 =&lt;br /&gt;
&lt;br /&gt;
== 7.1 PRI 설정 순서 ==&lt;br /&gt;
&lt;br /&gt;
# PGM 101에서 필요한 E1/PRI 포트와 라이선스를 확인한다.&lt;br /&gt;
# PGM 103에서 보드 등록과 상태를 확인한다.&lt;br /&gt;
# PGM 131에서 E1 물리계층, Clock 및 PRI 시그널링을 설정한다.&lt;br /&gt;
# PGM 140에서 채널 사용 여부와 국선 그룹을 지정한다.&lt;br /&gt;
# PGM 143에서 ISDN 특성을 설정한다.&lt;br /&gt;
# PGM 151과 PGM 200~202에서 CLIP/COLP, 발신번호 및 DID 라우팅을 설정한다.&lt;br /&gt;
# 국선 상태 화면에서 Layer 1, Layer 2, D채널 상태를 확인한다.&lt;br /&gt;
# 착신, 발신, CID, 통화 종료 및 다채널 동시통화를 시험한다.&lt;br /&gt;
&lt;br /&gt;
== 7.2 국선 ISDN 특성 - PGM 143 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_115_pgm143_isdn.png|1200px|thumb|PGM 143 국선 ISDN 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 설정 기준 !! 검증&lt;br /&gt;
|-&lt;br /&gt;
| TEI || 회선 구성에 따른 자동 또는 지정값 || Layer 2 정상 여부&lt;br /&gt;
|-&lt;br /&gt;
| ISDN 종류 || 국내 회선 코덱·망 조건에 맞춤 || 음성 왜곡 여부&lt;br /&gt;
|-&lt;br /&gt;
| CLIP/CLIR || 발신번호 표시 정책 || 외부 휴대전화에서 표시 확인&lt;br /&gt;
|-&lt;br /&gt;
| COLP/COLR || 연결번호 표시 정책 || 전환·대표번호 환경에서 확인&lt;br /&gt;
|-&lt;br /&gt;
| ISDN Clock Sync || PGM 195 시간원과 연계할 때만 사용 || 시스템 시간 동기 확인&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 7.3 CID/CPN - PGM 151 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_125_pgm151_cid_cpn.png|1200px|thumb|PGM 151 CID/CPN 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
PGM 151은 국선별 CLIP/COLP 테이블, 발신번호 타입, 내선 CLI 및 DID 번호 삭제 등을 결정한다. 발신번호가 대표번호인지 내선별 DOD인지 통신사업자 정책을 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;발신번호 문제 확인 순서&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# PGM 151에서 해당 국선의 CLIP 테이블과 내선 CLI 타입을 확인한다.&lt;br /&gt;
# PGM 201의 변환 규칙을 확인한다.&lt;br /&gt;
# 내선에서 설정된 CLI 번호와 국선 착신번호 전달 옵션을 확인한다.&lt;br /&gt;
# 통신사업자가 허용한 발신번호 형식과 자릿수를 확인한다.&lt;br /&gt;
# SETUP 메시지 추적이 가능하면 Calling Party Number와 Numbering Plan/Type을 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 7.4 ISDN 공통과 CLIP/COLP - PGM 200, 201 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_230_pgm200_isdn_common.png|1200px|thumb|PGM 200 ISDN 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_231_pgm201_clip_colp.png|1200px|thumb|PGM 201 CLIP/COLP 테이블|없음]]&lt;br /&gt;
&lt;br /&gt;
PGM 201은 ISDN SETUP 또는 CONNECT 메시지에 보낼 CLIP/COLP 디지트를 정의한다. 앞자리 삭제와 추가 규칙이 중복되면 잘못된 번호가 전송되므로 원본번호 → 삭제 → 추가 → 최종번호를 표로 작성하고 적용한다.&lt;br /&gt;
&lt;br /&gt;
== 7.5 PRI DID와 MSN - PGM 202 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_232_pgm202_msn.png|1200px|thumb|PGM 202 MSN 테이블|없음]]&lt;br /&gt;
&lt;br /&gt;
PGM 202에서 통신망으로부터 수신되는 Called Number를 내선, 내선 그룹, 교환수 등 실제 목적지에 매핑한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 수신번호 예시 !! 목적지 예시 !! 용도&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || 내선 1000 || 직통 DID&lt;br /&gt;
|-&lt;br /&gt;
| 2000 || 내선그룹 6200 || 대표번호 그룹 착신&lt;br /&gt;
|-&lt;br /&gt;
| 9999 || 교환수 1000 || 미지정 번호 처리&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
수신번호가 전체 번호인지 끝자리만 전달되는지는 통신사업자별로 다르다. 실제 수신 디지트를 확인한 후 정확히 일치시키거나 PGM 231에서 변환한다.&lt;br /&gt;
&lt;br /&gt;
= 8. R2 MFC 개통 =&lt;br /&gt;
&lt;br /&gt;
== 8.1 DCOB 국선 특성 - PGM 153 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_130_pgm153_r2.png|1200px|thumb|PGM 153 DCOB/R2 국선 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
R2 MFC는 PGM 131의 E1 물리계층과 PGM 153의 R2 신호 조건을 함께 설정한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 의미 !! 설정 기준&lt;br /&gt;
|-&lt;br /&gt;
| DNIS 서비스 || R2에서 착신번호 정보를 처리 || 회선사 제공 여부&lt;br /&gt;
|-&lt;br /&gt;
| CLI 번호 개수 || 망에 요청할 발신자번호 자릿수 || 회선사 제공 자릿수&lt;br /&gt;
|-&lt;br /&gt;
| DCOB 종류 || DID, DOD 또는 DID/DOD || 회선 용도&lt;br /&gt;
|-&lt;br /&gt;
| Call Category || R2 Category 신호 || 회선사 지정값&lt;br /&gt;
|-&lt;br /&gt;
| 최대 DID 수신 자릿수 || E1/R2에서 받을 최대 DID 자릿수 || 실제 제공 자릿수&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PGM 153의 최대 DID 수신 자릿수가 0이면 별도의 DID 수신 자릿수 설정을 따를 수 있다. 두 위치의 설정이 충돌하지 않는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 8.2 R2 장애 확인 순서 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 증상 !! 의심 구간 !! 확인 !! 조치&lt;br /&gt;
|-&lt;br /&gt;
| E1 동기 불가 || 물리계층·Clock || LOS/AIS, 프레이밍, HDB3, CRC || PGM 131과 회선사 값 일치&lt;br /&gt;
|-&lt;br /&gt;
| 발신 점유 후 실패 || R2 방향·Category || DOD 허용, Category, 채널 상태 || PGM 140/153 수정&lt;br /&gt;
|-&lt;br /&gt;
| 착신은 되나 목적지 오류 || DID 자릿수·변환 || 실제 수신 디지트와 설정 자릿수 || PGM 153/145/231 수정&lt;br /&gt;
|-&lt;br /&gt;
| 발신번호 미표시 || CLI 요청·전송 || CLI 요청 자릿수, 사업자 제공 여부 || PGM 153과 사업자 조건 확인&lt;br /&gt;
|-&lt;br /&gt;
| 일부 채널만 실패 || 채널별 속성 || 국선 그룹·사용 여부·채널 알람 || 동일 회선 채널 설정 비교&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 9. SIP 트렁크 개통 =&lt;br /&gt;
&lt;br /&gt;
== 9.1 SIP 공통 특성 - PGM 210 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_240_pgm210_sip_common.png|1200px|thumb|PGM 210 SIP 공통 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
SIP 공통 특성에서 전송방식, SIP 타이머, NAT/원격등록, 보안 관련 공통값을 확인한다. 인터넷에 직접 노출되는 구성에서는 원격등록 허용, 실패 임계치 및 차단 정책을 반드시 설정한다.&lt;br /&gt;
&lt;br /&gt;
== 9.2 SIP 국선 특성 - PGM 133 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_246_pgm133_sip_trunk.png|1200px|thumb|PGM 133 SIP 국선 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 입력값 예시 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 서버 주소 || 사업자 제공 IP/FQDN || DNS 사용 시 시스템 DNS 확인&lt;br /&gt;
|-&lt;br /&gt;
| Outbound Proxy || 사업자 제공 시 ON || 제공하지 않으면 임의 활성화 금지&lt;br /&gt;
|-&lt;br /&gt;
| 도메인 || sip.example.co.kr || From/To/Request-URI 정책과 연계&lt;br /&gt;
|-&lt;br /&gt;
| UDP/TCP/TLS 포트 || 5060 또는 5061 등 제공값 || 방화벽 정책과 일치&lt;br /&gt;
|-&lt;br /&gt;
| 등록시간 || 사업자 제공값 또는 허용 범위 || 너무 길면 장애 감지가 늦어짐&lt;br /&gt;
|-&lt;br /&gt;
| 등록 사용자 테이블 || SIP 사용자 ID 인덱스 || 계정 기반 트렁크에서 사용&lt;br /&gt;
|-&lt;br /&gt;
| 코덱 || G.711u/a 등 협의값 || 착신전환 시 양단 코덱 협상 확인&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;검증 항목&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# SIP Trunk 상태에서 Registered 또는 사업자 요구 상태를 확인한다.&lt;br /&gt;
# OPTIONS, REGISTER 또는 INVITE가 지정 인터페이스로 송수신되는지 확인한다.&lt;br /&gt;
# 발신 INVITE의 From, P-Asserted-Identity, Contact, Request-URI를 확인한다.&lt;br /&gt;
# 착신 INVITE의 Called Number가 DID 테이블과 일치하는지 확인한다.&lt;br /&gt;
# 양방향 RTP, DTMF 방식, 착신전환, 통화 종료(BYE)를 시험한다.&lt;br /&gt;
&lt;br /&gt;
= 10. DID와 착신 라우팅 =&lt;br /&gt;
&lt;br /&gt;
== 10.1 국선/IP 착신 링 - PGM 144 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_117_pgm144_incoming_ring.png|1200px|thumb|PGM 144 국선/IP 착신 링 지정|없음]]&lt;br /&gt;
&lt;br /&gt;
일반 국선 또는 DID 분석을 사용하지 않는 인입호의 주간·야간·시간대별 착신 목적지를 지정한다. 대표 착신은 내선 하나보다 내선 그룹을 사용하는 것이 운영과 장애 대응에 유리하다.&lt;br /&gt;
&lt;br /&gt;
== 10.2 다목적 DID 테이블 - PGM 231 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_287_pgm231_did.png|1200px|thumb|PGM 231 다목적 DID 테이블|없음]]&lt;br /&gt;
&lt;br /&gt;
PGM 231은 수신 DID를 비교·변환하여 목적지로 라우팅할 때 사용한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;작성 예시&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 인덱스 !! 수신 DID !! 변환/목적지 !! 주간 !! 야간&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0212341000 || 대표 그룹 || 그룹 6200 || 당직 1001&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 02123410XX || 끝 4자리 사용 || 해당 내선 || 해당 내선&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 미매칭 || 기본 목적지 || 교환수 1000 || 안내방송/당직&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 10.3 DID 수신 자릿수 적용 원칙 ==&lt;br /&gt;
&lt;br /&gt;
* PRI: 실제 Q.931 Called Party Number에 포함되는 숫자를 기준으로 PGM 151, 202, 231을 설계한다.&lt;br /&gt;
* R2: PGM 153의 최대 DID 수신 자릿수와 DID 서비스 특성의 기대 자릿수를 함께 확인한다.&lt;br /&gt;
* SIP: Request-URI 또는 To 헤더 중 시스템이 분석하도록 설정된 필드의 숫자를 기준으로 한다.&lt;br /&gt;
* 수신번호 앞자리 삭제는 한 위치에서만 수행하는 것을 원칙으로 한다.&lt;br /&gt;
* 전체 대표번호와 끝자리 DID가 혼재하면 번호별 변환 흐름표를 작성한다.&lt;br /&gt;
&lt;br /&gt;
= 11. 내선 그룹과 대표번호 =&lt;br /&gt;
&lt;br /&gt;
== 11.1 내선 그룹 지정 - PGM 190 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_207_pgm190_station_group.png|1200px|thumb|PGM 190 내선 그룹 지정|없음]]&lt;br /&gt;
&lt;br /&gt;
# 그룹 종류와 가상번호를 정한다.&lt;br /&gt;
# 구성원 내선을 등록하고 순서를 확인한다.&lt;br /&gt;
# 교환수, 부서 대표, 음성사서함 등 용도별로 그룹을 분리한다.&lt;br /&gt;
# DID 또는 PGM 144의 착신 목적지를 그룹 가상번호로 지정한다.&lt;br /&gt;
&lt;br /&gt;
== 11.2 내선 그룹 특성 - PGM 191 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_208_pgm191_station_group_attr.png|1200px|thumb|PGM 191 내선 그룹 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
그룹 링 방식, 대기, 재호출, 무응답 목적지, 그룹통화 대기 및 보류음을 설정한다. 모든 구성원 동시링은 단말 수와 트래픽을 고려한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;시험&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 구성원 유휴·통화중·로그아웃 상태별 인입&lt;br /&gt;
* 무응답 타임아웃 후 다음 구성원 또는 대체 목적지&lt;br /&gt;
* 주·야간 목적지 전환&lt;br /&gt;
* 그룹 대기 중 보류음과 통화 포기 처리&lt;br /&gt;
&lt;br /&gt;
= 12. LCR과 발신 제한 =&lt;br /&gt;
&lt;br /&gt;
== 12.1 LCR 제어 - PGM 220 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_274_pgm220_lcr_control.png|1200px|thumb|PGM 220 LCR 제어 특성|없음]]&lt;br /&gt;
&lt;br /&gt;
LCR은 PGM 220의 사용 모드, PGM 221의 비교 코드, PGM 222의 숫자 변경 및 PGM 224의 발신 제한이 함께 동작한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;초기 적용 권장&#039;&#039;&#039; : 일반적인 국선 점유코드 뒤의 번호만 LCR로 처리하려면 Loop LCR부터 검토한다. 내부 다이얼까지 분석하는 모드는 내선번호와 외부번호 충돌 가능성이 있으므로 충분한 시험 후 적용한다.&lt;br /&gt;
&lt;br /&gt;
== 12.2 LCR 비교 코드 - PGM 221 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_276_pgm221_lcr_compare.png|1200px|thumb|PGM 221 LCR 비교 코드|없음]]&lt;br /&gt;
&lt;br /&gt;
비교 코드는 사용자가 다이얼한 번호의 Prefix를 분석하여 적용할 숫자 변경 테이블 인덱스를 선택한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 비교 코드 예시 !! 분류 !! 연결할 변경 테이블&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 국제전화 || 국제전화용 DMT&lt;br /&gt;
|-&lt;br /&gt;
| 010 || 이동전화 || 이동전화용 DMT&lt;br /&gt;
|-&lt;br /&gt;
| 0X || 시외전화 || 시외전화용 DMT&lt;br /&gt;
|-&lt;br /&gt;
| 1XX || 특수·긴급전화 || 변경 없이 지정 국선 그룹&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 12.3 숫자 변경 - PGM 222 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_277_pgm222_lcr_digit.png|1200px|thumb|PGM 222 LCR 숫자 변경|없음]]&lt;br /&gt;
&lt;br /&gt;
PGM 222에서 앞자리 삭제, 추가 숫자, 사용할 국선 그룹 및 대체 국선 그룹을 지정한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 원 다이얼 !! 삭제 !! 추가 !! 최종 발신 !! 국선 그룹&lt;br /&gt;
|-&lt;br /&gt;
| 9-010-1234-5678 || 국선 점유코드 처리 후 0자리 || 없음 || 01012345678 || SIP 10&lt;br /&gt;
|-&lt;br /&gt;
| 9-02-1234-5678 || 0자리 || 사업자 선택번호가 있으면 추가 || 설계값 || PRI 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 12.4 허용·거부 테이블 - PGM 224 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_280_pgm224_allow_deny.png|1200px|thumb|PGM 224 허용/거부 테이블|없음]]&lt;br /&gt;
&lt;br /&gt;
발신 제한은 긴 번호부터 구체적으로 설계하고 비상전화는 별도 허용한다. 차단 규칙만 만들고 허용 예외를 누락하지 않도록 실제 다이얼 시험표를 사용한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 시험번호 유형 !! COS 1 !! COS 2 !! COS 3&lt;br /&gt;
|-&lt;br /&gt;
| 내선 || 허용 || 허용 || 허용&lt;br /&gt;
|-&lt;br /&gt;
| 112/119 || 허용 || 허용 || 허용&lt;br /&gt;
|-&lt;br /&gt;
| 시내 || 허용 || 허용 || 정책에 따름&lt;br /&gt;
|-&lt;br /&gt;
| 시외 || 허용 || 허용 || 차단&lt;br /&gt;
|-&lt;br /&gt;
| 이동전화 || 허용 || 허용 || 차단&lt;br /&gt;
|-&lt;br /&gt;
| 국제전화 || 허용 || 차단 || 차단&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 13. 최종 시험 =&lt;br /&gt;
&lt;br /&gt;
== 13.1 기본 시험표 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 번호 !! 시험 항목 !! 정상 기준 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 시스템 재접속 || 변경된 관리 IP로 접속 및 저장값 유지 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 장치 등록 || 모든 보드·단말 등록, 비정상 알람 없음 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 내선 상호통화 || 양방향 음성, 번호·이름 표시 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 대표번호 착신 || 주간 목적지와 그룹 링 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DID 착신 || 각 DID가 지정 내선으로 착신 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 일반 발신 || 국선 그룹 선택과 발신번호 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 발신 제한 || COS별 허용·차단 정책 일치 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 8 || PRI/R2 다채널 || 복수 동시통화 및 양방향 채널 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 9 || SIP 미디어 || 양방향 RTP, DTMF, 종료 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 착신전환 || 내부·외부 전환, CID와 코덱 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 주·야간 || 전환 후 목적지와 발신등급 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 장애복구 || 재부팅 후 등록·회선·라우팅 자동복구 || □ 정상 / □ 불량&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 13.2 PRI 상태별 판단 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 상태 !! 판단 !! 다음 확인&lt;br /&gt;
|-&lt;br /&gt;
| Layer 1 DOWN || 물리회선, 프레이밍, 라인코드, Clock 문제 가능성 높음 || 케이블·LOS/AIS·PGM 131·회선사&lt;br /&gt;
|-&lt;br /&gt;
| Layer 1 UP / Layer 2 DOWN || D채널, TEI, 망 역할 또는 프로토콜 불일치 || PGM 131/143, D채널 패킷&lt;br /&gt;
|-&lt;br /&gt;
| Layer 2 UP / 호 설정 실패 || 번호형식, 국선 그룹, 발신권한, CPN 문제 || PGM 116/117/140/151/200&lt;br /&gt;
|-&lt;br /&gt;
| 착신만 실패 || DID 자릿수·MSN·DID 변환 문제 || PGM 145/151/202/231&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 13.3 변경 후 백업 ==&lt;br /&gt;
&lt;br /&gt;
# 개통 시험 완료 후 전체 데이터베이스를 다시 다운로드한다.&lt;br /&gt;
# 변경 전 백업과 구분되는 파일명으로 저장한다.&lt;br /&gt;
# 시스템 모델, SW 버전, 라이선스, IP, 회선정보 및 주요 PGM 값을 개통결과서에 기록한다.&lt;br /&gt;
# 백업 파일의 복구 절차와 관리자 계정을 운영 담당자에게 인계한다.&lt;br /&gt;
&lt;br /&gt;
= 14. 장애 분석 빠른 참조 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 증상 !! 우선 확인 PGM !! 핵심 포인트&lt;br /&gt;
|-&lt;br /&gt;
| 특정 내선만 발신 불가 || 116, 117, 224 || COS, 국선 그룹 접근, 허용·거부&lt;br /&gt;
|-&lt;br /&gt;
| 전체 내선 발신 불가 || 131/133, 140, 220~222 || 회선 상태, 국선 사용, LCR 경로&lt;br /&gt;
|-&lt;br /&gt;
| DID가 대표로만 착신 || 145, 151, 202, 231 || 실제 수신번호와 변환 규칙&lt;br /&gt;
|-&lt;br /&gt;
| 발신번호가 잘못 표시 || 151, 200, 201 || CLIP 테이블, 삭제·추가, 번호 타입&lt;br /&gt;
|-&lt;br /&gt;
| PRI D채널 불안정 || 131, 143 || Clock, 프레이밍, TEI, 회선 알람&lt;br /&gt;
|-&lt;br /&gt;
| R2 착신 디지트 누락 || 145, 153, 231 || 기대 자릿수와 최대 수신 자릿수&lt;br /&gt;
|-&lt;br /&gt;
| SIP 등록 실패 || 102, 133, 210 || 라우팅, DNS, Proxy, 인증, 포트·전송방식&lt;br /&gt;
|-&lt;br /&gt;
| SIP 통화는 되나 무음 || 102, 133, 210 || RTP 경로, NAT, 코덱, 방화벽&lt;br /&gt;
|-&lt;br /&gt;
| 그룹 착신 누락 || 190, 191 || 구성원, 로그인, 링 방식, 타임아웃&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 15. 참고 및 적용 범위 =&lt;br /&gt;
&lt;br /&gt;
* 참고 문서: &#039;&#039;iPECS eMG80/100 &amp;amp; eMG800 &amp;amp; UCP 주장치 프로그램 설명서&#039;&#039;, Issue 2.2, 2025-04.&lt;br /&gt;
* 본 가이드는 매뉴얼의 메뉴와 PGM 설명을 현장 개통 순서로 재구성한 작업 문서이다.&lt;br /&gt;
* 화면 이미지는 해당 매뉴얼에서 개통에 필요한 프로그램 화면만 발췌하였다. 사내·유지보수 목적의 사용 범위를 확인하고 외부 공개 시 제조사 저작권 및 배포 조건을 검토한다.&lt;br /&gt;
* 실제 적용값은 장비 모델, SW, 라이선스, 보드 및 통신사업자 제공 조건을 우선한다.&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=분류:IPECS]]&lt;br /&gt;
[[index.php?title=분류:UCP]]&lt;br /&gt;
[[index.php?title=분류:PBX]]&lt;br /&gt;
[[index.php?title=분류:개통 가이드]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=IPECS-UCP&amp;diff=78</id>
		<title>IPECS-UCP</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=IPECS-UCP&amp;diff=78"/>
		<updated>2026-07-13T13:26:14Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: 새 문서: {{DISPLAYTITLE:iPECS UCP 주장치 개통 가이드}}  &amp;lt;div class=&amp;quot;wiki-notice&amp;quot;&amp;gt; &amp;#039;&amp;#039;&amp;#039;적용 대상&amp;#039;&amp;#039;&amp;#039; : iPECS UCP 계열 / Unified 주장치 프로그램 Issue 2.2 / SW 6.2.x 기준&amp;lt;br&amp;gt; &amp;#039;&amp;#039;&amp;#039;문서 목적&amp;#039;&amp;#039;&amp;#039; : 신규 설치 또는 교체 현장에서 기본 시스템, 내선, 국선, DID, PRI·R2·SIP 및 LCR을 순서대로 개통하기 위한 실무 절차&amp;lt;br&amp;gt; &amp;#039;&amp;#039;&amp;#039;주의&amp;#039;&amp;#039;&amp;#039; : 모델, 라이선스, 소프트웨어 버전 및 통신사업자 제공 조건에 따라 화면과 선택...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iPECS UCP 주장치 개통 가이드}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;wiki-notice&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;적용 대상&#039;&#039;&#039; : iPECS UCP 계열 / Unified 주장치 프로그램 Issue 2.2 / SW 6.2.x 기준&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;문서 목적&#039;&#039;&#039; : 신규 설치 또는 교체 현장에서 기본 시스템, 내선, 국선, DID, PRI·R2·SIP 및 LCR을 순서대로 개통하기 위한 실무 절차&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;주의&#039;&#039;&#039; : 모델, 라이선스, 소프트웨어 버전 및 통신사업자 제공 조건에 따라 화면과 선택 항목이 달라질 수 있다. 특히 E1 PRI와 R2 MFC의 시그널링 값은 반드시 회선 개통내역서와 대조한다.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= 1. 작업 전 준비 =&lt;br /&gt;
&lt;br /&gt;
== 1.1 준비 자료 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분 !! 준비할 정보 !! 확인처&lt;br /&gt;
|-&lt;br /&gt;
| 시스템 || UCP 모델, SW 버전, 라이선스 파일, 주장치 IP, 게이트웨이, 서브넷 || 장비 및 구축 설계서&lt;br /&gt;
|-&lt;br /&gt;
| 내선 || 내선번호, 사용자명, 단말 종류, MAC 주소, 서비스 등급 || 내선번호 계획표&lt;br /&gt;
|-&lt;br /&gt;
| 국선 || 국선 종류, 채널 수, 국선 그룹, 발신 허용 내선 || 통신 구성표&lt;br /&gt;
|-&lt;br /&gt;
| E1 PRI || 회선 역할, 프레이밍, 라인코드, CRC, Clock, D채널, DID 자릿수, 발신번호 정책 || 통신사업자 개통내역서&lt;br /&gt;
|-&lt;br /&gt;
| R2 MFC || E1 회선 조건, 수신 DID 자릿수, CLI 요청 자릿수, DNIS/ANI, Category || 통신사업자 개통내역서&lt;br /&gt;
|-&lt;br /&gt;
| SIP || Proxy/Registrar, 도메인, 포트, 전송방식, 계정, 비밀번호, DID, 코덱 || SIP 사업자 개통내역서&lt;br /&gt;
|-&lt;br /&gt;
| 라우팅 || 대표번호, DID-내선 매핑, 주/야간 착신처, LCR 비교·변환 규칙 || 번호 라우팅 설계서&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 1.2 위험 작업 및 백업 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:2px solid #c62828; background:#ffebee; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&#039;&#039;&#039;경고:&#039;&#039;&#039; 초기화, 장치 포트 수 변경, 데이터베이스 업로드, 펌웨어 적용 및 시스템 리셋은 통화 중단을 발생시킬 수 있다. 서비스 시간 외 작업하고 현재 데이터베이스를 먼저 내려받는다.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 웹 관리자에서 &#039;&#039;&#039;유지보수 → 데이터베이스 관리&#039;&#039;&#039;로 이동한다.&lt;br /&gt;
# 전체 데이터베이스를 선택하여 PC에 다운로드한다.&lt;br /&gt;
# 파일명에 사이트명, 장비명, SW 버전, 백업 일자를 포함한다.&lt;br /&gt;
# 복구에 사용할 관리자 계정과 암호를 별도 보관한다.&lt;br /&gt;
# 변경 전후 백업을 각각 보관한다.&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_366_database_management.png|1200px|center|thumb|데이터베이스 관리 화면]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;권장 파일명 예시&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# 변경 전 데이터베이스 백업 파일&lt;br /&gt;
SITE_UCP2400_SW6.2_before_20260713.db&lt;br /&gt;
&lt;br /&gt;
# 개통 완료 후 데이터베이스 백업 파일&lt;br /&gt;
SITE_UCP2400_SW6.2_after_20260713.db&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 2. 권장 개통 순서 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 순서 !! 작업 !! 관련 프로그램 !! 완료 기준&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 백업, 버전·라이선스 확인 || 유지보수, 시스템 개요 || 복구 파일과 라이선스 확보&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 시스템 ID, 번호체계, 시간 설정 || PGM 100, 106~109, 178, 195 || 국가 코드와 다이얼 플랜 확정&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 시스템·장치 IP 및 장치 등록 || PGM 101~103 || 보드와 단말 등록 정상&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 내선 번호·종류·권한 설정 || PGM 105, 110~117 || 내선 상호통화 정상&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 국선 보드와 국선 그룹 설정 || PGM 131~145 || 채널 상태 정상, 국선 그룹 점유 가능&lt;br /&gt;
|-&lt;br /&gt;
| 6 || PRI/R2/SIP 세부 설정 || PGM 131, 133, 143, 151, 153, 200~202, 210 || 신호·등록 상태 정상&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 대표번호·DID 착신 설정 || PGM 144, 145, 167, 202, 231 || 번호별 지정 목적지 착신&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 내선 그룹·교환수 설정 || PGM 164, 190, 191 || 대표·그룹 호출 정상&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 발신권한·LCR 설정 || PGM 116, 117, 220~224 || 내선 등급별 발신 정상&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 주·야간, 장애·복구 시험 || 관련 PGM 및 상태 화면 || 시험표 전 항목 통과&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 3. 접속과 설치 마법사 =&lt;br /&gt;
&lt;br /&gt;
== 3.1 웹 관리자 접속 ==&lt;br /&gt;
&lt;br /&gt;
# 작업 PC를 주장치 관리망에 연결한다.&lt;br /&gt;
# UCP 관리 IP로 웹 브라우저를 접속한다.&lt;br /&gt;
# 유지보수 권한 계정으로 로그인한다.&lt;br /&gt;
# 최초 접속이면 기본 계정 사용 후 즉시 별도 유지보수 계정과 강력한 암호를 등록한다.&lt;br /&gt;
# 접속 후 시스템 모델, SW 버전, 라이선스 상태를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:2px solid #c62828; background:#ffebee; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&#039;&#039;&#039;경고:&#039;&#039;&#039; 매뉴얼에 기재된 초기 계정과 암호를 운영 상태로 방치하지 않는다. 관리 페이지는 관리 VLAN 또는 허용된 관리 IP에서만 접근하도록 제한한다.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3.2 설치 마법사 ==&lt;br /&gt;
&lt;br /&gt;
설치 마법사는 초기 구축 시 기본 항목을 순차 설정할 수 있다. 기존 운영 장비에서는 현재 데이터를 덮어쓸 수 있으므로 개별 PGM 방식이 안전하다.&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_020_install_wizard.png|1200px|center|thumb|설치 마법사 화면]]&lt;br /&gt;
&lt;br /&gt;
매뉴얼 기준 설치 마법사의 주요 단계는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
# 라이선스와 시스템 기본정보 확인&lt;br /&gt;
# 시스템 시간과 날짜 설정&lt;br /&gt;
# 내선번호 설정&lt;br /&gt;
# 국선 그룹 점유 코드, 교환수 호출 및 대리응답 코드 확인&lt;br /&gt;
# 유지보수 계정 등록&lt;br /&gt;
# 라이선스 파일 업로드&lt;br /&gt;
&lt;br /&gt;
= 4. 시스템 기본 설정 =&lt;br /&gt;
&lt;br /&gt;
== 4.1 시스템 ID와 국가 코드 - PGM 100 ==&lt;br /&gt;
&lt;br /&gt;
메뉴 경로는 &#039;&#039;&#039;시스템 ID &amp;amp; 번호 체계 → 시스템 ID(100)&#039;&#039;&#039;이다.&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_038_pgm100_system_id.png|1200px|center|thumb|PGM 100 시스템 ID]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 권장 작업 !! 확인 사항&lt;br /&gt;
|-&lt;br /&gt;
| 국가 코드 || 대한민국 적용 여부 확인 || 국가 코드 변경 시 번호체계와 기본값이 함께 바뀔 수 있음&lt;br /&gt;
|-&lt;br /&gt;
| 사이트 이름 || 현장 또는 고객사 식별명 입력 || 장애 알람과 관리 화면에서 구분 가능한 이름 사용&lt;br /&gt;
|-&lt;br /&gt;
| 지역 코드 || 실제 지역번호에 맞게 입력 || 발신번호 가공 정책과 함께 확인&lt;br /&gt;
|-&lt;br /&gt;
| 번호체계 || 국내 기본 번호체계를 기준으로 설계값 확인 || 기존 번호와 기능 코드 충돌 금지&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UCP에서 번호체계를 변경할 때는 국가 코드 변경용 DIP 스위치 상태를 매뉴얼과 장비 상태에 맞춰 확인한다. 변경 후에는 내선번호, 국선 점유코드 및 기능코드가 의도대로 유지됐는지 반드시 다시 조회한다.&lt;br /&gt;
&lt;br /&gt;
== 4.2 장치 포트 수 - PGM 101 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_043_pgm101_device_ports.png|1200px|center|thumb|PGM 101 장치 포트 수 변경]]&lt;br /&gt;
&lt;br /&gt;
# 시스템 개요에서 라이선스별 최대 포트 수를 확인한다.&lt;br /&gt;
# PGM 101에서 필요한 장치 종류와 새 포트 수를 입력한다.&lt;br /&gt;
# 등록 또는 저장 후 시스템 재시작 필요 여부를 확인한다.&lt;br /&gt;
# 재시작 후 현재 포트 수와 등록 장치 수가 일치하는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #ef6c00; background:#fff3e0; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&#039;&#039;&#039;주의:&#039;&#039;&#039; 장치 포트 수 변경은 시스템 재시작 후 적용되는 항목이 포함된다. 서비스 중 임의 변경하지 않는다.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.3 시스템 IP 주소 - PGM 102 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_045_pgm102_system_ip.png|1200px|center|thumb|PGM 102 시스템 IP 주소]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 설정 예시 !! 확인 포인트&lt;br /&gt;
|-&lt;br /&gt;
| 시스템 IP || 192.168.10.10 || 다른 장비와 중복되지 않는 고정 IP&lt;br /&gt;
|-&lt;br /&gt;
| 서브넷 마스크 || 255.255.255.0 || 음성·관리망 설계와 일치&lt;br /&gt;
|-&lt;br /&gt;
| 기본 라우터 || 192.168.10.1 || 원격 단말 또는 SIP 사업자망 경로 확인&lt;br /&gt;
|-&lt;br /&gt;
| 부 시스템 IP || 필요 시에만 사용 || 이중망 설계가 없으면 임의 입력 금지&lt;br /&gt;
|-&lt;br /&gt;
| 자동 IP 할당 || 현장 설계에 따라 결정 || DHCP 또는 장치 자동할당 범위 중복 확인&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IP 변경 전 현재 접속 IP, 변경 IP, 작업 PC의 임시 IP를 기록한다. 저장 후 관리 세션이 끊어지면 작업 PC 주소를 새 관리망으로 변경하여 재접속한다.&lt;br /&gt;
&lt;br /&gt;
== 4.4 장치 IP와 등록 - PGM 103 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_047_pgm103_device_ip.png|1200px|center|thumb|PGM 103 장치 IP 주소와 등록 상태]]&lt;br /&gt;
&lt;br /&gt;
PGM 103에서는 보드·게이트웨이·IP 단말의 순번, IP, MAC 및 등록 상태를 확인한다.&lt;br /&gt;
&lt;br /&gt;
* 로컬 장치는 동일 LAN의 멀티캐스트 등록이 가능한지 확인한다.&lt;br /&gt;
* 원격 장치는 MAC 주소를 미리 등록하고 라우팅·NAT·방화벽 조건을 확인한다.&lt;br /&gt;
* 장치 교체 시 기존 순번과 내선 매핑을 유지해야 하는지 먼저 결정한다.&lt;br /&gt;
* 등록 실패 시 시스템 IP, 장치의 시스템 주소, VLAN, 게이트웨이, MAC 오입력을 우선 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 4.5 내선번호 - PGM 105 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_049_pgm105_extension_number.png|1200px|center|thumb|PGM 105 내선번호]]&lt;br /&gt;
&lt;br /&gt;
UCP는 등록 시 기본적으로 4자리 내선번호를 할당한다. PGM 105에서 실제 번호계획에 맞게 변경한다.&lt;br /&gt;
&lt;br /&gt;
# 번호 변경 전 단말 순번과 기존 내선번호를 내보내거나 기록한다.&lt;br /&gt;
# 변경 대상 범위를 조회한다.&lt;br /&gt;
# 새 내선번호를 입력하고 저장한다.&lt;br /&gt;
# 내선 상호 호출, 발신자 표시, DSS/BLF 키 및 그룹 구성원이 새 번호로 연동되는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 4.6 번호체계 - PGM 106~109 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_050_pgm106_numbering_plan.png|1200px|center|thumb|PGM 106~109 번호체계]]&lt;br /&gt;
&lt;br /&gt;
필수 확인 코드는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 기능 !! 매뉴얼 기본 예 !! 현장 확인&lt;br /&gt;
|-&lt;br /&gt;
| 첫 번째 국선 그룹 점유 || 9 || 내선번호 또는 지역번호와 충돌 여부&lt;br /&gt;
|-&lt;br /&gt;
| 국선 그룹 사용 || 89 || 뒤에 입력할 국선 그룹 번호 체계 확인&lt;br /&gt;
|-&lt;br /&gt;
| 교환수 호출 || 시스템 설정값 확인 || 대표 교환수 내선과 연동&lt;br /&gt;
|-&lt;br /&gt;
| 대리응답 || 시스템 설정값 확인 || 대리응답 그룹 시험&lt;br /&gt;
|-&lt;br /&gt;
| 비상전화 || 별도 비상전화 테이블과 연동 || 112·119 등은 발신제한 예외 처리&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 5. 내선 설정 =&lt;br /&gt;
&lt;br /&gt;
== 5.1 내선 종류 - PGM 110 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_055_pgm110_station_type.png|1200px|center|thumb|PGM 110 내선 종류]]&lt;br /&gt;
&lt;br /&gt;
단말 종류가 실제 연결 방식과 일치하는지 확인한다. 일반전화기, 디지털 키폰, IP 단말 및 SIP 단말은 등록과 기능 제공 방식이 다르다. FAX나 모뎀을 연결하는 SLT는 음성용 내선과 동일하게 일괄 설정하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 5.2 내선 서비스 등급 - PGM 116 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_074_pgm116_cos.png|1200px|center|thumb|PGM 116 내선 서비스 등급]]&lt;br /&gt;
&lt;br /&gt;
내선별 주간·야간 서비스 등급을 지정한다. 서비스 등급 번호 자체만 지정해서는 발신 제한이 완성되지 않으며 PGM 224의 허용·거부 테이블과 함께 설계해야 한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;권장 등급 예시&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 등급 !! 대상 !! 허용 범위&lt;br /&gt;
|-&lt;br /&gt;
| COS 1 || 교환수·관리자 || 국내·국제·휴대전화, 업무상 필요한 전체 발신&lt;br /&gt;
|-&lt;br /&gt;
| COS 2 || 일반 사무실 || 시내·시외·휴대전화, 국제전화 제한&lt;br /&gt;
|-&lt;br /&gt;
| COS 3 || 공용·회의실 || 시내 또는 지정번호만 허용&lt;br /&gt;
|-&lt;br /&gt;
| COS 4 || FAX·설비 || 지정된 번호 유형만 허용&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 5.3 국선/IP 그룹 지정 - PGM 117 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_076_pgm117_co_group_access.png|1200px|center|thumb|PGM 117 국선/IP 그룹 지정]]&lt;br /&gt;
&lt;br /&gt;
이 화면에서 각 내선이 사용할 수 있는 국선 그룹을 지정한다.&lt;br /&gt;
&lt;br /&gt;
# 일반 사용자, 교환수, FAX 및 임원 등 역할별 허용 국선 그룹을 먼저 정한다.&lt;br /&gt;
# 내선 범위를 조회한다.&lt;br /&gt;
# 사용할 국선 그룹만 허용한다.&lt;br /&gt;
# 주간·야간 정책이 다르면 양쪽을 각각 확인한다.&lt;br /&gt;
# 허용 내선과 차단 내선에서 실제 국선 점유 시험을 한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;자주 발생하는 증상&#039;&#039;&#039; : 국선은 정상인데 특정 내선만 발신되지 않으면 PGM 117 그룹 접근권한과 PGM 116/224 발신등급을 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
= 6. 국선 보드와 공통 설정 =&lt;br /&gt;
&lt;br /&gt;
== 6.1 T1/E1/PRI 보드 - PGM 131 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_102_pgm131_e1_pri.png|1200px|center|thumb|PGM 131 T1/E1/PRI 특성]]&lt;br /&gt;
&lt;br /&gt;
PGM 131은 E1/PRI 물리·링크 조건을 설정하는 핵심 화면이다. 적용값은 회선 개통내역서를 기준으로 한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 일반적인 국내 E1 PRI 검토값 !! 주의&lt;br /&gt;
|-&lt;br /&gt;
| 인터페이스 || E1/PRI || T1과 혼동 금지&lt;br /&gt;
|-&lt;br /&gt;
| 프레이밍 || 회선사 제공값 || CRC4 사용 여부 포함&lt;br /&gt;
|-&lt;br /&gt;
| 라인 코드 || HDB3 여부 확인 || 회선사와 불일치 시 동기 불가&lt;br /&gt;
|-&lt;br /&gt;
| Clock || 통신망 수신 Clock 기준 여부 확인 || 양단이 모두 Master 또는 모두 Slave가 되지 않게 구성&lt;br /&gt;
|-&lt;br /&gt;
| 시그널링 || PRI 또는 R2 || 보드와 라이선스 지원 여부 확인&lt;br /&gt;
|-&lt;br /&gt;
| D채널 || 사업자 지정 채널 || 일반적인 관행만으로 단정하지 말 것&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 6.2 보드 기본 특성 - PGM 132 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_103_pgm132_board.png|1200px|center|thumb|PGM 132 보드 기본 특성]]&lt;br /&gt;
&lt;br /&gt;
보드 순번, 장치 IP, 게이트웨이 연결상태, Web/Telnet 허용 여부 등 보드 전체에 적용되는 값을 확인한다. 관리 목적이 아니라면 불필요한 원격 관리 접근은 허용하지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 6.3 국선 개요와 국선 공통 특성 - PGM 140 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_106_co_overview.png|1200px|center|thumb|국선 개요]]&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_107_pgm140_co_common.png|1200px|center|thumb|PGM 140 국선 공통 특성]]&lt;br /&gt;
&lt;br /&gt;
국선 개요에서 보드 유형, 국선 유형, 포트 및 국선 그룹을 확인한 뒤 PGM 140에서 다음을 지정한다.&lt;br /&gt;
&lt;br /&gt;
* 국선 사용 여부&lt;br /&gt;
* 국선 종류: Normal, DID, TIE 또는 사용 안 함&lt;br /&gt;
* 국선 그룹 번호&lt;br /&gt;
* 점유 방향과 순서&lt;br /&gt;
* ICLID/CID 처리&lt;br /&gt;
* LCR 적용용 LDT 테이블&lt;br /&gt;
&lt;br /&gt;
채널별 설정이 다르면 동일 회선의 일부 채널만 발신 또는 착신 실패할 수 있으므로 범위 조회 후 전 채널 값을 비교한다.&lt;br /&gt;
&lt;br /&gt;
= 7. E1 PRI 개통 =&lt;br /&gt;
&lt;br /&gt;
== 7.1 PRI 설정 순서 ==&lt;br /&gt;
&lt;br /&gt;
# PGM 101에서 필요한 E1/PRI 포트와 라이선스를 확인한다.&lt;br /&gt;
# PGM 103에서 보드 등록과 상태를 확인한다.&lt;br /&gt;
# PGM 131에서 E1 물리계층, Clock 및 PRI 시그널링을 설정한다.&lt;br /&gt;
# PGM 140에서 채널 사용 여부와 국선 그룹을 지정한다.&lt;br /&gt;
# PGM 143에서 ISDN 특성을 설정한다.&lt;br /&gt;
# PGM 151과 PGM 200~202에서 CLIP/COLP, 발신번호 및 DID 라우팅을 설정한다.&lt;br /&gt;
# 국선 상태 화면에서 Layer 1, Layer 2, D채널 상태를 확인한다.&lt;br /&gt;
# 착신, 발신, CID, 통화 종료 및 다채널 동시통화를 시험한다.&lt;br /&gt;
&lt;br /&gt;
== 7.2 국선 ISDN 특성 - PGM 143 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_115_pgm143_isdn.png|1200px|center|thumb|PGM 143 국선 ISDN 특성]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 설정 기준 !! 검증&lt;br /&gt;
|-&lt;br /&gt;
| TEI || 회선 구성에 따른 자동 또는 지정값 || Layer 2 정상 여부&lt;br /&gt;
|-&lt;br /&gt;
| ISDN 종류 || 국내 회선 코덱·망 조건에 맞춤 || 음성 왜곡 여부&lt;br /&gt;
|-&lt;br /&gt;
| CLIP/CLIR || 발신번호 표시 정책 || 외부 휴대전화에서 표시 확인&lt;br /&gt;
|-&lt;br /&gt;
| COLP/COLR || 연결번호 표시 정책 || 전환·대표번호 환경에서 확인&lt;br /&gt;
|-&lt;br /&gt;
| ISDN Clock Sync || PGM 195 시간원과 연계할 때만 사용 || 시스템 시간 동기 확인&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 7.3 CID/CPN - PGM 151 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_125_pgm151_cid_cpn.png|1200px|center|thumb|PGM 151 CID/CPN 특성]]&lt;br /&gt;
&lt;br /&gt;
PGM 151은 국선별 CLIP/COLP 테이블, 발신번호 타입, 내선 CLI 및 DID 번호 삭제 등을 결정한다. 발신번호가 대표번호인지 내선별 DOD인지 통신사업자 정책을 먼저 확인한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;발신번호 문제 확인 순서&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# PGM 151에서 해당 국선의 CLIP 테이블과 내선 CLI 타입을 확인한다.&lt;br /&gt;
# PGM 201의 변환 규칙을 확인한다.&lt;br /&gt;
# 내선에서 설정된 CLI 번호와 국선 착신번호 전달 옵션을 확인한다.&lt;br /&gt;
# 통신사업자가 허용한 발신번호 형식과 자릿수를 확인한다.&lt;br /&gt;
# SETUP 메시지 추적이 가능하면 Calling Party Number와 Numbering Plan/Type을 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 7.4 ISDN 공통과 CLIP/COLP - PGM 200, 201 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_230_pgm200_isdn_common.png|1200px|center|thumb|PGM 200 ISDN 특성]]&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_231_pgm201_clip_colp.png|1200px|center|thumb|PGM 201 CLIP/COLP 테이블]]&lt;br /&gt;
&lt;br /&gt;
PGM 201은 ISDN SETUP 또는 CONNECT 메시지에 보낼 CLIP/COLP 디지트를 정의한다. 앞자리 삭제와 추가 규칙이 중복되면 잘못된 번호가 전송되므로 원본번호 → 삭제 → 추가 → 최종번호를 표로 작성하고 적용한다.&lt;br /&gt;
&lt;br /&gt;
== 7.5 PRI DID와 MSN - PGM 202 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_232_pgm202_msn.png|1200px|center|thumb|PGM 202 MSN 테이블]]&lt;br /&gt;
&lt;br /&gt;
PGM 202에서 통신망으로부터 수신되는 Called Number를 내선, 내선 그룹, 교환수 등 실제 목적지에 매핑한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 수신번호 예시 !! 목적지 예시 !! 용도&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || 내선 1000 || 직통 DID&lt;br /&gt;
|-&lt;br /&gt;
| 2000 || 내선그룹 6200 || 대표번호 그룹 착신&lt;br /&gt;
|-&lt;br /&gt;
| 9999 || 교환수 1000 || 미지정 번호 처리&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
수신번호가 전체 번호인지 끝자리만 전달되는지는 통신사업자별로 다르다. 실제 수신 디지트를 확인한 후 정확히 일치시키거나 PGM 231에서 변환한다.&lt;br /&gt;
&lt;br /&gt;
= 8. R2 MFC 개통 =&lt;br /&gt;
&lt;br /&gt;
== 8.1 DCOB 국선 특성 - PGM 153 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_130_pgm153_r2.png|1200px|center|thumb|PGM 153 DCOB/R2 국선 특성]]&lt;br /&gt;
&lt;br /&gt;
R2 MFC는 PGM 131의 E1 물리계층과 PGM 153의 R2 신호 조건을 함께 설정한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 의미 !! 설정 기준&lt;br /&gt;
|-&lt;br /&gt;
| DNIS 서비스 || R2에서 착신번호 정보를 처리 || 회선사 제공 여부&lt;br /&gt;
|-&lt;br /&gt;
| CLI 번호 개수 || 망에 요청할 발신자번호 자릿수 || 회선사 제공 자릿수&lt;br /&gt;
|-&lt;br /&gt;
| DCOB 종류 || DID, DOD 또는 DID/DOD || 회선 용도&lt;br /&gt;
|-&lt;br /&gt;
| Call Category || R2 Category 신호 || 회선사 지정값&lt;br /&gt;
|-&lt;br /&gt;
| 최대 DID 수신 자릿수 || E1/R2에서 받을 최대 DID 자릿수 || 실제 제공 자릿수&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PGM 153의 최대 DID 수신 자릿수가 0이면 별도의 DID 수신 자릿수 설정을 따를 수 있다. 두 위치의 설정이 충돌하지 않는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 8.2 R2 장애 확인 순서 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 증상 !! 의심 구간 !! 확인 !! 조치&lt;br /&gt;
|-&lt;br /&gt;
| E1 동기 불가 || 물리계층·Clock || LOS/AIS, 프레이밍, HDB3, CRC || PGM 131과 회선사 값 일치&lt;br /&gt;
|-&lt;br /&gt;
| 발신 점유 후 실패 || R2 방향·Category || DOD 허용, Category, 채널 상태 || PGM 140/153 수정&lt;br /&gt;
|-&lt;br /&gt;
| 착신은 되나 목적지 오류 || DID 자릿수·변환 || 실제 수신 디지트와 설정 자릿수 || PGM 153/145/231 수정&lt;br /&gt;
|-&lt;br /&gt;
| 발신번호 미표시 || CLI 요청·전송 || CLI 요청 자릿수, 사업자 제공 여부 || PGM 153과 사업자 조건 확인&lt;br /&gt;
|-&lt;br /&gt;
| 일부 채널만 실패 || 채널별 속성 || 국선 그룹·사용 여부·채널 알람 || 동일 회선 채널 설정 비교&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 9. SIP 트렁크 개통 =&lt;br /&gt;
&lt;br /&gt;
== 9.1 SIP 공통 특성 - PGM 210 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_240_pgm210_sip_common.png|1200px|center|thumb|PGM 210 SIP 공통 특성]]&lt;br /&gt;
&lt;br /&gt;
SIP 공통 특성에서 전송방식, SIP 타이머, NAT/원격등록, 보안 관련 공통값을 확인한다. 인터넷에 직접 노출되는 구성에서는 원격등록 허용, 실패 임계치 및 차단 정책을 반드시 설정한다.&lt;br /&gt;
&lt;br /&gt;
== 9.2 SIP 국선 특성 - PGM 133 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_246_pgm133_sip_trunk.png|1200px|center|thumb|PGM 133 SIP 국선 특성]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 항목 !! 입력값 예시 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 서버 주소 || 사업자 제공 IP/FQDN || DNS 사용 시 시스템 DNS 확인&lt;br /&gt;
|-&lt;br /&gt;
| Outbound Proxy || 사업자 제공 시 ON || 제공하지 않으면 임의 활성화 금지&lt;br /&gt;
|-&lt;br /&gt;
| 도메인 || sip.example.co.kr || From/To/Request-URI 정책과 연계&lt;br /&gt;
|-&lt;br /&gt;
| UDP/TCP/TLS 포트 || 5060 또는 5061 등 제공값 || 방화벽 정책과 일치&lt;br /&gt;
|-&lt;br /&gt;
| 등록시간 || 사업자 제공값 또는 허용 범위 || 너무 길면 장애 감지가 늦어짐&lt;br /&gt;
|-&lt;br /&gt;
| 등록 사용자 테이블 || SIP 사용자 ID 인덱스 || 계정 기반 트렁크에서 사용&lt;br /&gt;
|-&lt;br /&gt;
| 코덱 || G.711u/a 등 협의값 || 착신전환 시 양단 코덱 협상 확인&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;검증 항목&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# SIP Trunk 상태에서 Registered 또는 사업자 요구 상태를 확인한다.&lt;br /&gt;
# OPTIONS, REGISTER 또는 INVITE가 지정 인터페이스로 송수신되는지 확인한다.&lt;br /&gt;
# 발신 INVITE의 From, P-Asserted-Identity, Contact, Request-URI를 확인한다.&lt;br /&gt;
# 착신 INVITE의 Called Number가 DID 테이블과 일치하는지 확인한다.&lt;br /&gt;
# 양방향 RTP, DTMF 방식, 착신전환, 통화 종료(BYE)를 시험한다.&lt;br /&gt;
&lt;br /&gt;
= 10. DID와 착신 라우팅 =&lt;br /&gt;
&lt;br /&gt;
== 10.1 국선/IP 착신 링 - PGM 144 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_117_pgm144_incoming_ring.png|1200px|center|thumb|PGM 144 국선/IP 착신 링 지정]]&lt;br /&gt;
&lt;br /&gt;
일반 국선 또는 DID 분석을 사용하지 않는 인입호의 주간·야간·시간대별 착신 목적지를 지정한다. 대표 착신은 내선 하나보다 내선 그룹을 사용하는 것이 운영과 장애 대응에 유리하다.&lt;br /&gt;
&lt;br /&gt;
== 10.2 다목적 DID 테이블 - PGM 231 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_287_pgm231_did.png|1200px|center|thumb|PGM 231 다목적 DID 테이블]]&lt;br /&gt;
&lt;br /&gt;
PGM 231은 수신 DID를 비교·변환하여 목적지로 라우팅할 때 사용한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;작성 예시&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 인덱스 !! 수신 DID !! 변환/목적지 !! 주간 !! 야간&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0212341000 || 대표 그룹 || 그룹 6200 || 당직 1001&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 02123410XX || 끝 4자리 사용 || 해당 내선 || 해당 내선&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 미매칭 || 기본 목적지 || 교환수 1000 || 안내방송/당직&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 10.3 DID 수신 자릿수 적용 원칙 ==&lt;br /&gt;
&lt;br /&gt;
* PRI: 실제 Q.931 Called Party Number에 포함되는 숫자를 기준으로 PGM 151, 202, 231을 설계한다.&lt;br /&gt;
* R2: PGM 153의 최대 DID 수신 자릿수와 DID 서비스 특성의 기대 자릿수를 함께 확인한다.&lt;br /&gt;
* SIP: Request-URI 또는 To 헤더 중 시스템이 분석하도록 설정된 필드의 숫자를 기준으로 한다.&lt;br /&gt;
* 수신번호 앞자리 삭제는 한 위치에서만 수행하는 것을 원칙으로 한다.&lt;br /&gt;
* 전체 대표번호와 끝자리 DID가 혼재하면 번호별 변환 흐름표를 작성한다.&lt;br /&gt;
&lt;br /&gt;
= 11. 내선 그룹과 대표번호 =&lt;br /&gt;
&lt;br /&gt;
== 11.1 내선 그룹 지정 - PGM 190 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_207_pgm190_station_group.png|1200px|center|thumb|PGM 190 내선 그룹 지정]]&lt;br /&gt;
&lt;br /&gt;
# 그룹 종류와 가상번호를 정한다.&lt;br /&gt;
# 구성원 내선을 등록하고 순서를 확인한다.&lt;br /&gt;
# 교환수, 부서 대표, 음성사서함 등 용도별로 그룹을 분리한다.&lt;br /&gt;
# DID 또는 PGM 144의 착신 목적지를 그룹 가상번호로 지정한다.&lt;br /&gt;
&lt;br /&gt;
== 11.2 내선 그룹 특성 - PGM 191 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_208_pgm191_station_group_attr.png|1200px|center|thumb|PGM 191 내선 그룹 특성]]&lt;br /&gt;
&lt;br /&gt;
그룹 링 방식, 대기, 재호출, 무응답 목적지, 그룹통화 대기 및 보류음을 설정한다. 모든 구성원 동시링은 단말 수와 트래픽을 고려한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;시험&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 구성원 유휴·통화중·로그아웃 상태별 인입&lt;br /&gt;
* 무응답 타임아웃 후 다음 구성원 또는 대체 목적지&lt;br /&gt;
* 주·야간 목적지 전환&lt;br /&gt;
* 그룹 대기 중 보류음과 통화 포기 처리&lt;br /&gt;
&lt;br /&gt;
= 12. LCR과 발신 제한 =&lt;br /&gt;
&lt;br /&gt;
== 12.1 LCR 제어 - PGM 220 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_274_pgm220_lcr_control.png|1200px|center|thumb|PGM 220 LCR 제어 특성]]&lt;br /&gt;
&lt;br /&gt;
LCR은 PGM 220의 사용 모드, PGM 221의 비교 코드, PGM 222의 숫자 변경 및 PGM 224의 발신 제한이 함께 동작한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;초기 적용 권장&#039;&#039;&#039; : 일반적인 국선 점유코드 뒤의 번호만 LCR로 처리하려면 Loop LCR부터 검토한다. 내부 다이얼까지 분석하는 모드는 내선번호와 외부번호 충돌 가능성이 있으므로 충분한 시험 후 적용한다.&lt;br /&gt;
&lt;br /&gt;
== 12.2 LCR 비교 코드 - PGM 221 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_276_pgm221_lcr_compare.png|1200px|center|thumb|PGM 221 LCR 비교 코드]]&lt;br /&gt;
&lt;br /&gt;
비교 코드는 사용자가 다이얼한 번호의 Prefix를 분석하여 적용할 숫자 변경 테이블 인덱스를 선택한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 비교 코드 예시 !! 분류 !! 연결할 변경 테이블&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 국제전화 || 국제전화용 DMT&lt;br /&gt;
|-&lt;br /&gt;
| 010 || 이동전화 || 이동전화용 DMT&lt;br /&gt;
|-&lt;br /&gt;
| 0X || 시외전화 || 시외전화용 DMT&lt;br /&gt;
|-&lt;br /&gt;
| 1XX || 특수·긴급전화 || 변경 없이 지정 국선 그룹&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 12.3 숫자 변경 - PGM 222 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_277_pgm222_lcr_digit.png|1200px|center|thumb|PGM 222 LCR 숫자 변경]]&lt;br /&gt;
&lt;br /&gt;
PGM 222에서 앞자리 삭제, 추가 숫자, 사용할 국선 그룹 및 대체 국선 그룹을 지정한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 원 다이얼 !! 삭제 !! 추가 !! 최종 발신 !! 국선 그룹&lt;br /&gt;
|-&lt;br /&gt;
| 9-010-1234-5678 || 국선 점유코드 처리 후 0자리 || 없음 || 01012345678 || SIP 10&lt;br /&gt;
|-&lt;br /&gt;
| 9-02-1234-5678 || 0자리 || 사업자 선택번호가 있으면 추가 || 설계값 || PRI 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 12.4 허용·거부 테이블 - PGM 224 ==&lt;br /&gt;
&lt;br /&gt;
[[File:ucp_280_pgm224_allow_deny.png|1200px|center|thumb|PGM 224 허용/거부 테이블]]&lt;br /&gt;
&lt;br /&gt;
발신 제한은 긴 번호부터 구체적으로 설계하고 비상전화는 별도 허용한다. 차단 규칙만 만들고 허용 예외를 누락하지 않도록 실제 다이얼 시험표를 사용한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 시험번호 유형 !! COS 1 !! COS 2 !! COS 3&lt;br /&gt;
|-&lt;br /&gt;
| 내선 || 허용 || 허용 || 허용&lt;br /&gt;
|-&lt;br /&gt;
| 112/119 || 허용 || 허용 || 허용&lt;br /&gt;
|-&lt;br /&gt;
| 시내 || 허용 || 허용 || 정책에 따름&lt;br /&gt;
|-&lt;br /&gt;
| 시외 || 허용 || 허용 || 차단&lt;br /&gt;
|-&lt;br /&gt;
| 이동전화 || 허용 || 허용 || 차단&lt;br /&gt;
|-&lt;br /&gt;
| 국제전화 || 허용 || 차단 || 차단&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 13. 최종 시험 =&lt;br /&gt;
&lt;br /&gt;
== 13.1 기본 시험표 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 번호 !! 시험 항목 !! 정상 기준 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 시스템 재접속 || 변경된 관리 IP로 접속 및 저장값 유지 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 장치 등록 || 모든 보드·단말 등록, 비정상 알람 없음 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 내선 상호통화 || 양방향 음성, 번호·이름 표시 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 대표번호 착신 || 주간 목적지와 그룹 링 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DID 착신 || 각 DID가 지정 내선으로 착신 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 일반 발신 || 국선 그룹 선택과 발신번호 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 발신 제한 || COS별 허용·차단 정책 일치 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 8 || PRI/R2 다채널 || 복수 동시통화 및 양방향 채널 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 9 || SIP 미디어 || 양방향 RTP, DTMF, 종료 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 착신전환 || 내부·외부 전환, CID와 코덱 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 주·야간 || 전환 후 목적지와 발신등급 정상 || □ 정상 / □ 불량&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 장애복구 || 재부팅 후 등록·회선·라우팅 자동복구 || □ 정상 / □ 불량&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 13.2 PRI 상태별 판단 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 상태 !! 판단 !! 다음 확인&lt;br /&gt;
|-&lt;br /&gt;
| Layer 1 DOWN || 물리회선, 프레이밍, 라인코드, Clock 문제 가능성 높음 || 케이블·LOS/AIS·PGM 131·회선사&lt;br /&gt;
|-&lt;br /&gt;
| Layer 1 UP / Layer 2 DOWN || D채널, TEI, 망 역할 또는 프로토콜 불일치 || PGM 131/143, D채널 패킷&lt;br /&gt;
|-&lt;br /&gt;
| Layer 2 UP / 호 설정 실패 || 번호형식, 국선 그룹, 발신권한, CPN 문제 || PGM 116/117/140/151/200&lt;br /&gt;
|-&lt;br /&gt;
| 착신만 실패 || DID 자릿수·MSN·DID 변환 문제 || PGM 145/151/202/231&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 13.3 변경 후 백업 ==&lt;br /&gt;
&lt;br /&gt;
# 개통 시험 완료 후 전체 데이터베이스를 다시 다운로드한다.&lt;br /&gt;
# 변경 전 백업과 구분되는 파일명으로 저장한다.&lt;br /&gt;
# 시스템 모델, SW 버전, 라이선스, IP, 회선정보 및 주요 PGM 값을 개통결과서에 기록한다.&lt;br /&gt;
# 백업 파일의 복구 절차와 관리자 계정을 운영 담당자에게 인계한다.&lt;br /&gt;
&lt;br /&gt;
= 14. 장애 분석 빠른 참조 =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 증상 !! 우선 확인 PGM !! 핵심 포인트&lt;br /&gt;
|-&lt;br /&gt;
| 특정 내선만 발신 불가 || 116, 117, 224 || COS, 국선 그룹 접근, 허용·거부&lt;br /&gt;
|-&lt;br /&gt;
| 전체 내선 발신 불가 || 131/133, 140, 220~222 || 회선 상태, 국선 사용, LCR 경로&lt;br /&gt;
|-&lt;br /&gt;
| DID가 대표로만 착신 || 145, 151, 202, 231 || 실제 수신번호와 변환 규칙&lt;br /&gt;
|-&lt;br /&gt;
| 발신번호가 잘못 표시 || 151, 200, 201 || CLIP 테이블, 삭제·추가, 번호 타입&lt;br /&gt;
|-&lt;br /&gt;
| PRI D채널 불안정 || 131, 143 || Clock, 프레이밍, TEI, 회선 알람&lt;br /&gt;
|-&lt;br /&gt;
| R2 착신 디지트 누락 || 145, 153, 231 || 기대 자릿수와 최대 수신 자릿수&lt;br /&gt;
|-&lt;br /&gt;
| SIP 등록 실패 || 102, 133, 210 || 라우팅, DNS, Proxy, 인증, 포트·전송방식&lt;br /&gt;
|-&lt;br /&gt;
| SIP 통화는 되나 무음 || 102, 133, 210 || RTP 경로, NAT, 코덱, 방화벽&lt;br /&gt;
|-&lt;br /&gt;
| 그룹 착신 누락 || 190, 191 || 구성원, 로그인, 링 방식, 타임아웃&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 15. 참고 및 적용 범위 =&lt;br /&gt;
&lt;br /&gt;
* 참고 문서: &#039;&#039;iPECS eMG80/100 &amp;amp; eMG800 &amp;amp; UCP 주장치 프로그램 설명서&#039;&#039;, Issue 2.2, 2025-04.&lt;br /&gt;
* 본 가이드는 매뉴얼의 메뉴와 PGM 설명을 현장 개통 순서로 재구성한 작업 문서이다.&lt;br /&gt;
* 화면 이미지는 해당 매뉴얼에서 개통에 필요한 프로그램 화면만 발췌하였다. 사내·유지보수 목적의 사용 범위를 확인하고 외부 공개 시 제조사 저작권 및 배포 조건을 검토한다.&lt;br /&gt;
* 실제 적용값은 장비 모델, SW, 라이선스, 보드 및 통신사업자 제공 조건을 우선한다.&lt;br /&gt;
&lt;br /&gt;
[[분류:iPECS]]&lt;br /&gt;
[[분류:UCP]]&lt;br /&gt;
[[분류:PBX]]&lt;br /&gt;
[[분류:개통 가이드]]&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_047_pgm103_device_ip.png&amp;diff=77</id>
		<title>파일:Ucp 047 pgm103 device ip.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_047_pgm103_device_ip.png&amp;diff=77"/>
		<updated>2026-07-13T13:24:57Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_045_pgm102_system_ip.png&amp;diff=76</id>
		<title>파일:Ucp 045 pgm102 system ip.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_045_pgm102_system_ip.png&amp;diff=76"/>
		<updated>2026-07-13T13:24:39Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_043_pgm101_device_ports.png&amp;diff=75</id>
		<title>파일:Ucp 043 pgm101 device ports.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_043_pgm101_device_ports.png&amp;diff=75"/>
		<updated>2026-07-13T13:24:34Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_038_pgm100_system_id.png&amp;diff=74</id>
		<title>파일:Ucp 038 pgm100 system id.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_038_pgm100_system_id.png&amp;diff=74"/>
		<updated>2026-07-13T13:24:24Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_020_install_wizard.png&amp;diff=73</id>
		<title>파일:Ucp 020 install wizard.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_020_install_wizard.png&amp;diff=73"/>
		<updated>2026-07-13T13:24:19Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_103_pgm132_board.png&amp;diff=72</id>
		<title>파일:Ucp 103 pgm132 board.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_103_pgm132_board.png&amp;diff=72"/>
		<updated>2026-07-13T13:24:13Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_102_pgm131_e1_pri.png&amp;diff=71</id>
		<title>파일:Ucp 102 pgm131 e1 pri.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_102_pgm131_e1_pri.png&amp;diff=71"/>
		<updated>2026-07-13T13:24:07Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_076_pgm117_co_group_access.png&amp;diff=70</id>
		<title>파일:Ucp 076 pgm117 co group access.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_076_pgm117_co_group_access.png&amp;diff=70"/>
		<updated>2026-07-13T13:24:00Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_074_pgm116_cos.png&amp;diff=69</id>
		<title>파일:Ucp 074 pgm116 cos.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_074_pgm116_cos.png&amp;diff=69"/>
		<updated>2026-07-13T13:23:55Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_055_pgm110_station_type.png&amp;diff=68</id>
		<title>파일:Ucp 055 pgm110 station type.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_055_pgm110_station_type.png&amp;diff=68"/>
		<updated>2026-07-13T13:23:47Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_050_pgm106_numbering_plan.png&amp;diff=67</id>
		<title>파일:Ucp 050 pgm106 numbering plan.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_050_pgm106_numbering_plan.png&amp;diff=67"/>
		<updated>2026-07-13T13:23:42Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_049_pgm105_extension_number.png&amp;diff=66</id>
		<title>파일:Ucp 049 pgm105 extension number.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_049_pgm105_extension_number.png&amp;diff=66"/>
		<updated>2026-07-13T13:23:36Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_207_pgm190_station_group.png&amp;diff=65</id>
		<title>파일:Ucp 207 pgm190 station group.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_207_pgm190_station_group.png&amp;diff=65"/>
		<updated>2026-07-13T13:23:27Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_130_pgm153_r2.png&amp;diff=64</id>
		<title>파일:Ucp 130 pgm153 r2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_130_pgm153_r2.png&amp;diff=64"/>
		<updated>2026-07-13T13:23:19Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_125_pgm151_cid_cpn.png&amp;diff=63</id>
		<title>파일:Ucp 125 pgm151 cid cpn.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_125_pgm151_cid_cpn.png&amp;diff=63"/>
		<updated>2026-07-13T13:23:11Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_117_pgm144_incoming_ring.png&amp;diff=62</id>
		<title>파일:Ucp 117 pgm144 incoming ring.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_117_pgm144_incoming_ring.png&amp;diff=62"/>
		<updated>2026-07-13T13:23:04Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
	<entry>
		<id>https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_115_pgm143_isdn.png&amp;diff=61</id>
		<title>파일:Ucp 115 pgm143 isdn.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.chnagil.net/index.php?title=%ED%8C%8C%EC%9D%BC:Ucp_115_pgm143_isdn.png&amp;diff=61"/>
		<updated>2026-07-13T13:23:00Z</updated>

		<summary type="html">&lt;p&gt;Chnagil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chnagil</name></author>
	</entry>
</feed>