<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>쿠리이야기</title>
    <link>https://cool-ri.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 30 May 2026 17:40:47 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>박쿠리</managingEditor>
    <item>
      <title>AWS 네트워크 인프라 구축 정리</title>
      <link>https://cool-ri.tistory.com/83</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;AWS 네트워크 인프라 구축 정리 (VPC &amp;rarr; Subnet &amp;rarr; Routing &amp;rarr; IGW &amp;rarr; Redshift)&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h2 data-end=&quot;429&quot; data-start=&quot;395&quot; data-ke-size=&quot;size26&quot;&gt;VPC (Virtual Private Cloud)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;614&quot; data-start=&quot;431&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;466&quot; data-start=&quot;431&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: AWS에서 제공하는 가상의 네트워크 공간.&lt;/li&gt;
&lt;li data-end=&quot;530&quot; data-start=&quot;467&quot;&gt;&lt;b&gt;역할&lt;/b&gt;: 우리가 만들 리소스(EC2, RDS, Redshift 등)를 안전하게 격리된 환경에서 운영.&lt;/li&gt;
&lt;li data-end=&quot;614&quot; data-start=&quot;531&quot;&gt;&lt;b&gt;설정 시 포인트&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;614&quot; data-start=&quot;549&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;580&quot; data-start=&quot;549&quot;&gt;CIDR 블록 지정 (예: 10.0.0.0/16)&lt;/li&gt;
&lt;li data-end=&quot;614&quot; data-start=&quot;583&quot;&gt;이후 Subnet, 라우팅 등을 이 범위 내에서 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-end=&quot;649&quot; data-start=&quot;616&quot;&gt;&amp;nbsp;쉽게 말해 **&amp;ldquo;내 집터 마련하기&amp;rdquo;**에 해당한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;649&quot; data-start=&quot;616&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;675&quot; data-start=&quot;656&quot; data-ke-size=&quot;size26&quot;&gt;Subnet (서브넷)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;945&quot; data-start=&quot;677&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;718&quot; data-start=&quot;677&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: VPC의 IP 대역을 쪼개 만든 작은 네트워크 구역.&lt;/li&gt;
&lt;li data-end=&quot;822&quot; data-start=&quot;719&quot;&gt;&lt;b&gt;종류&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;822&quot; data-start=&quot;731&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;775&quot; data-start=&quot;731&quot;&gt;&lt;b&gt;Public Subnet&lt;/b&gt;: 외부 인터넷과 연결 가능 (IGW를 통해)&lt;/li&gt;
&lt;li data-end=&quot;822&quot; data-start=&quot;778&quot;&gt;&lt;b&gt;Private Subnet&lt;/b&gt;: 인터넷 연결 불가, 내부 리소스 전용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;945&quot; data-start=&quot;823&quot;&gt;&lt;b&gt;활용&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;945&quot; data-start=&quot;835&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;881&quot; data-start=&quot;835&quot;&gt;Redshift를 학습/테스트할 때는 Public Subnet에 두고 바로 접속&lt;/li&gt;
&lt;li data-end=&quot;945&quot; data-start=&quot;884&quot;&gt;운영 환경에서는 보안을 위해 Private Subnet에 두고 VPN이나 Bastion Host 통해 접속&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-end=&quot;976&quot; data-start=&quot;947&quot;&gt;**&amp;ldquo;집터 안에 방을 나눈 것&amp;rdquo;**과 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;976&quot; data-start=&quot;947&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1013&quot; data-start=&quot;983&quot; data-ke-size=&quot;size26&quot;&gt;Routing Table (라우팅 테이블)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1259&quot; data-start=&quot;1015&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1066&quot; data-start=&quot;1015&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: Subnet 안에서 발생한 트래픽이 &lt;b&gt;어디로 갈지 결정하는 지도&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;1160&quot; data-start=&quot;1067&quot;&gt;&lt;b&gt;예시 규칙&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1160&quot; data-start=&quot;1082&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1117&quot; data-start=&quot;1082&quot;&gt;10.0.0.0/16 &amp;rarr; local (VPC 내부 통신)&lt;/li&gt;
&lt;li data-end=&quot;1160&quot; data-start=&quot;1120&quot;&gt;0.0.0.0/0 &amp;rarr; igw-xxxx (외부 인터넷으로 나감)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1259&quot; data-start=&quot;1161&quot;&gt;&lt;b&gt;포인트&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1259&quot; data-start=&quot;1174&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1202&quot; data-start=&quot;1174&quot;&gt;Public Subnet &amp;rarr; IGW로 연결 필요&lt;/li&gt;
&lt;li data-end=&quot;1259&quot; data-start=&quot;1205&quot;&gt;Private Subnet &amp;rarr; NAT Gateway 통해서만 외부로 나가게 설계하는 경우 많음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-end=&quot;1290&quot; data-start=&quot;1261&quot;&gt;&amp;nbsp;**&amp;ldquo;길 안내 표지판&amp;rdquo;**이라고 보면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1290&quot; data-start=&quot;1261&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1326&quot; data-start=&quot;1297&quot; data-ke-size=&quot;size26&quot;&gt;Internet Gateway (IGW)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1466&quot; data-start=&quot;1328&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1358&quot; data-start=&quot;1328&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: VPC와 인터넷을 이어주는 관문.&lt;/li&gt;
&lt;li data-end=&quot;1466&quot; data-start=&quot;1359&quot;&gt;&lt;b&gt;필수 조건&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1466&quot; data-start=&quot;1374&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1414&quot; data-start=&quot;1374&quot;&gt;VPC에 IGW 연결해야 Public Subnet이 인터넷 접근 가능&lt;/li&gt;
&lt;li data-end=&quot;1466&quot; data-start=&quot;1417&quot;&gt;Routing Table에서 0.0.0.0/0을 IGW로 보내야 외부와 통신됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-end=&quot;1492&quot; data-start=&quot;1468&quot;&gt;&amp;nbsp;&amp;ldquo;마을 대문&amp;rdquo; 역할을 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1492&quot; data-start=&quot;1468&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1528&quot; data-start=&quot;1499&quot; data-ke-size=&quot;size26&quot;&gt;Redshift 클러스터와 네트워크 연결&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1759&quot; data-start=&quot;1530&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1560&quot; data-start=&quot;1530&quot;&gt;&lt;b&gt;Redshift는 VPC 안에 배치&lt;/b&gt;된다.&lt;/li&gt;
&lt;li data-end=&quot;1759&quot; data-start=&quot;1561&quot;&gt;&lt;b&gt;접속하려면&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1759&quot; data-start=&quot;1576&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1623&quot; data-start=&quot;1576&quot;&gt;클러스터 생성 시 Subnet Group(VPC 내 Subnet 묶음) 지정&lt;/li&gt;
&lt;li data-end=&quot;1674&quot; data-start=&quot;1626&quot;&gt;Public Access를 열지 Private Subnet 전용으로 둘지 결정&lt;/li&gt;
&lt;li data-end=&quot;1715&quot; data-start=&quot;1677&quot;&gt;Security Group에서 5439 포트를 열어야 함&lt;/li&gt;
&lt;li data-end=&quot;1759&quot; data-start=&quot;1718&quot;&gt;Routing Table + IGW 구성이 있어야 외부 접속 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-end=&quot;1838&quot; data-start=&quot;1761&quot;&gt;&amp;nbsp;보안이 중요한 운영 환경에서는 Private Subnet에 두고 VPN이나 Bastion Host를 거쳐 접속하는 게 일반적이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1838&quot; data-start=&quot;1761&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-end=&quot;1838&quot; data-start=&quot;1761&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1860&quot; data-start=&quot;1845&quot; data-ke-size=&quot;size26&quot;&gt;전체 흐름 요약&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2067&quot; data-start=&quot;1862&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1892&quot; data-start=&quot;1862&quot;&gt;&lt;b&gt;VPC 생성&lt;/b&gt; &amp;rarr; 내 네트워크 공간 마련&lt;/li&gt;
&lt;li data-end=&quot;1937&quot; data-start=&quot;1893&quot;&gt;&lt;b&gt;Subnet 생성&lt;/b&gt; &amp;rarr; Public / Private 구역 나누기&lt;/li&gt;
&lt;li data-end=&quot;1983&quot; data-start=&quot;1938&quot;&gt;&lt;b&gt;Routing Table 설정&lt;/b&gt; &amp;rarr; 트래픽이 IGW로 나가도록 지정&lt;/li&gt;
&lt;li data-end=&quot;2012&quot; data-start=&quot;1984&quot;&gt;&lt;b&gt;IGW 연결&lt;/b&gt; &amp;rarr; 외부 인터넷과 연결&lt;/li&gt;
&lt;li data-end=&quot;2067&quot; data-start=&quot;2013&quot;&gt;&lt;b&gt;Redshift 배치&lt;/b&gt; &amp;rarr; Subnet Group과 Security Group 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;2090&quot; data-start=&quot;2069&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그림으로 표현하면 이런 느낌이다:&lt;/p&gt;
&lt;p data-end=&quot;2090&quot; data-start=&quot;2069&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1757421844094&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[ Internet ]
     │
[ Internet Gateway ]
     │
[ Routing Table ]
     │
[ Public Subnet ] ─── [ Redshift Cluster ]
[ Private Subnet ] ─── (내부 자원들)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AWS</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/83</guid>
      <comments>https://cool-ri.tistory.com/83#entry83comment</comments>
      <pubDate>Tue, 9 Sep 2025 21:44:25 +0900</pubDate>
    </item>
    <item>
      <title>AWS Redshift란?</title>
      <link>https://cool-ri.tistory.com/82</link>
      <description>&lt;h2 data-end=&quot;115&quot; data-start=&quot;95&quot; data-ke-size=&quot;size26&quot;&gt;1. AWS Redshift란?&lt;/h2&gt;
&lt;p data-end=&quot;321&quot; data-start=&quot;117&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Amazon Redshift&lt;/b&gt;는 AWS에서 제공하는 &lt;b&gt;클라우드 기반 데이터 웨어하우스(DWH) 서비스&lt;/b&gt;.&lt;br /&gt;대규모 데이터를 빠르게 분석할 수 있도록 &lt;b&gt;MPP(Massively Parallel Processing, 대규모 병렬 처리)&lt;/b&gt; 아키텍처를 사용하며,&lt;br /&gt;SQL 기반 분석을 지원하기 때문에 기존 BI 툴이나 SQL 사용자에게 친숙하다.&lt;/p&gt;
&lt;p data-end=&quot;329&quot; data-start=&quot;323&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;329&quot; data-start=&quot;323&quot; data-ke-size=&quot;size16&quot;&gt;주요 특징:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;496&quot; data-start=&quot;330&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;372&quot; data-start=&quot;330&quot;&gt;&lt;b&gt;고성능&lt;/b&gt;: 컬럼 기반 저장, 압축, 병렬 처리로 빠른 쿼리 성능&lt;/li&gt;
&lt;li data-end=&quot;402&quot; data-start=&quot;373&quot;&gt;&lt;b&gt;확장성&lt;/b&gt;: 페타바이트 규모까지 확장 가능&lt;/li&gt;
&lt;li data-end=&quot;439&quot; data-start=&quot;403&quot;&gt;&lt;b&gt;호환성&lt;/b&gt;: PostgreSQL 기반 SQL 문법 지원&lt;/li&gt;
&lt;li data-end=&quot;496&quot; data-start=&quot;440&quot;&gt;&lt;b&gt;통합성&lt;/b&gt;: S3, Glue, QuickSight, Athena, EMR 등과 손쉽게 연동&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;560&quot; data-start=&quot;498&quot; data-ke-size=&quot;size16&quot;&gt;즉, Redshift는 &lt;b&gt;대용량 데이터를 빠르게 분석하기 위한 클라우드 기반 DWH 솔루션&lt;/b&gt;.&lt;/p&gt;
&lt;p data-end=&quot;560&quot; data-start=&quot;498&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;560&quot; data-start=&quot;498&quot; data-ke-size=&quot;size23&quot;&gt;2. 아키텍처 개념도&lt;/h3&gt;
&lt;pre id=&quot;code_1757331386764&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;                 ┌───────────────────┐
                 │      사용자        │ (BI 툴, SQL 클라이언트)
                 └─────────┬─────────┘
                           │
                           ▼
                  ┌─────────────────┐
                  │   Leader Node   │
                  │ - SQL 파싱      │
                  │ - 실행 계획 생성 │
                  └─────────┬───────┘
                            │
      ┌─────────────────────┴───────────────────────┐
      ▼                                             ▼
┌─────────────┐                               ┌──────────────┐
│ Compute Node│   ... 병렬 분산 처리 ...       │ Compute Node │
│ - 데이터 저장│                               │ - 데이터 저장│
│ - 쿼리 실행  │                               │ - 쿼리 실행  │
└─────────────┘                               └─────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-end=&quot;1422&quot; data-start=&quot;1409&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;1422&quot; data-start=&quot;1409&quot; data-ke-size=&quot;size26&quot;&gt;3. 주요 컴포넌트&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1760&quot; data-start=&quot;1424&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1499&quot; data-start=&quot;1424&quot;&gt;&lt;b&gt;Cluster&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1499&quot; data-start=&quot;1444&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1499&quot; data-start=&quot;1444&quot;&gt;Redshift의 기본 단위. Leader Node + 여러 Compute Node로 구성.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1593&quot; data-start=&quot;1501&quot;&gt;&lt;b&gt;Leader Node&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1593&quot; data-start=&quot;1525&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1593&quot; data-start=&quot;1525&quot;&gt;클라이언트 요청(SQL)을 받아 &lt;b&gt;쿼리 파싱 및 실행 계획 생성&lt;/b&gt; 후, 각 Compute Node에 작업 분배.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1677&quot; data-start=&quot;1595&quot;&gt;&lt;b&gt;Compute Node&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1677&quot; data-start=&quot;1620&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1649&quot; data-start=&quot;1620&quot;&gt;실제 데이터를 저장하고 쿼리를 실행하는 노드.&lt;/li&gt;
&lt;li data-end=&quot;1677&quot; data-start=&quot;1653&quot;&gt;결과를 Leader Node에 전달.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1760&quot; data-start=&quot;1679&quot;&gt;&lt;b&gt;Node Slice&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1760&quot; data-start=&quot;1702&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1760&quot; data-start=&quot;1702&quot;&gt;Compute Node는 내부적으로 Slice라는 작은 단위로 나뉘어 데이터와 작업을 병렬 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-end=&quot;1782&quot; data-start=&quot;1767&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;1782&quot; data-start=&quot;1767&quot; data-ke-size=&quot;size26&quot;&gt;4. 데이터 저장 방식&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2052&quot; data-start=&quot;1784&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1872&quot; data-start=&quot;1784&quot;&gt;&lt;b&gt;컬럼 기반 저장(Columnar Storage)&lt;/b&gt;&lt;br /&gt;&amp;rarr; 같은 컬럼 값들이 모여 저장되어 압축률이 높고, 특정 컬럼만 읽을 때 성능이 뛰어남.&lt;/li&gt;
&lt;li data-end=&quot;1922&quot; data-start=&quot;1874&quot;&gt;&lt;b&gt;압축(Encoding)&lt;/b&gt;&lt;br /&gt;&amp;rarr; 컬럼별 데이터 특성에 맞게 자동 압축.&lt;/li&gt;
&lt;li data-end=&quot;2052&quot; data-start=&quot;1924&quot;&gt;&lt;b&gt;분산 방식(Distribution Style)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2052&quot; data-start=&quot;1960&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1990&quot; data-start=&quot;1960&quot;&gt;&lt;b&gt;KEY&lt;/b&gt;: 특정 키를 기준으로 데이터 분산&lt;/li&gt;
&lt;li data-end=&quot;2023&quot; data-start=&quot;1993&quot;&gt;&lt;b&gt;ALL&lt;/b&gt;: 전체 데이터를 모든 노드에 복제&lt;/li&gt;
&lt;li data-end=&quot;2052&quot; data-start=&quot;2026&quot;&gt;&lt;b&gt;EVEN&lt;/b&gt;: 데이터를 균등하게 분산&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;2082&quot; data-start=&quot;2059&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;2082&quot; data-start=&quot;2059&quot; data-ke-size=&quot;size26&quot;&gt;5. Redshift 예제 (SQL)&lt;/h2&gt;
&lt;p data-end=&quot;2127&quot; data-start=&quot;2084&quot; data-ke-size=&quot;size16&quot;&gt;아래는 &lt;b&gt;S3 &amp;rarr; Redshift COPY &amp;rarr; 쿼리 실행&lt;/b&gt; 예시.&lt;/p&gt;
&lt;pre id=&quot;code_1757331404908&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- S3 데이터 로딩
COPY sales
FROM 's3://my-bucket/sales_data/'
IAM_ROLE 'arn:aws:iam::123456789012:role/RedshiftCopyRole'
FORMAT AS PARQUET;

-- 데이터 조회
SELECT region, SUM(amount) AS total_sales
FROM sales
GROUP BY region
ORDER BY total_sales DESC;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-end=&quot;2405&quot; data-start=&quot;2389&quot; data-ke-size=&quot;size26&quot;&gt;6. 실무 활용 시나리오&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2596&quot; data-start=&quot;2407&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2462&quot; data-start=&quot;2407&quot;&gt;&lt;b&gt;데이터 레이크 분석&lt;/b&gt;: S3에 저장된 데이터를 Redshift로 불러와 BI 분석 수행&lt;/li&gt;
&lt;li data-end=&quot;2526&quot; data-start=&quot;2463&quot;&gt;&lt;b&gt;실시간 + 배치 분석&lt;/b&gt;: Kinesis, Glue와 연동하여 실시간 데이터와 배치 데이터를 통합 분석&lt;/li&gt;
&lt;li data-end=&quot;2596&quot; data-start=&quot;2527&quot;&gt;&lt;b&gt;대규모 BI/리포팅&lt;/b&gt;: Tableau, Power BI, QuickSight 등 BI 툴과 연결해 대시보드 구축&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;2611&quot; data-start=&quot;2603&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;2611&quot; data-start=&quot;2603&quot; data-ke-size=&quot;size26&quot;&gt;7. 정리&lt;/h2&gt;
&lt;p data-end=&quot;2676&quot; data-start=&quot;2613&quot; data-ke-size=&quot;size16&quot;&gt;AWS Redshift는 &lt;b&gt;클라우드 환경에서 대규모 데이터 웨어하우스 구축&lt;/b&gt;을 가능하게 하는 서비스.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2739&quot; data-start=&quot;2677&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2704&quot; data-start=&quot;2677&quot;&gt;빠른 쿼리 성능(컬럼 기반 + 병렬 처리)&lt;/li&gt;
&lt;li data-end=&quot;2717&quot; data-start=&quot;2705&quot;&gt;탄력적인 확장성&lt;/li&gt;
&lt;li data-end=&quot;2739&quot; data-start=&quot;2718&quot;&gt;AWS 생태계와 자연스러운 통합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2791&quot; data-start=&quot;2741&quot; data-ke-size=&quot;size16&quot;&gt;데이터 엔지니어링, BI, 머신러닝 등 다양한 분석 환경에서 핵심 역할을 한다.&lt;/p&gt;</description>
      <category>AWS</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/82</guid>
      <comments>https://cool-ri.tistory.com/82#entry82comment</comments>
      <pubDate>Mon, 8 Sep 2025 20:39:44 +0900</pubDate>
    </item>
    <item>
      <title>AWS Glue 란?</title>
      <link>https://cool-ri.tistory.com/81</link>
      <description>&lt;h2 data-end=&quot;125&quot; data-start=&quot;109&quot; data-ke-size=&quot;size26&quot;&gt;1. AWS Glue란?&lt;/h2&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;127&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWS Glue&lt;/b&gt;는 AWS에서 제공하는 &lt;b&gt;서버리스(서버 관리 불필요) 데이터 통합 서비스&lt;/b&gt;.&lt;br /&gt;데이터를 &lt;b&gt;탐색(Discover) &amp;rarr; 준비(Prepare) &amp;rarr; 변환(Transform) &amp;rarr; 적재(Load)&lt;/b&gt; 하는 과정을 자동화하여 &lt;b&gt;ETL(Extract, Transform, Load)&lt;/b&gt; 작업을 쉽게 할 수 있도록 지원한다.&lt;/p&gt;
&lt;p data-end=&quot;330&quot; data-start=&quot;324&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;330&quot; data-start=&quot;324&quot; data-ke-size=&quot;size16&quot;&gt;주요 특징:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;452&quot; data-start=&quot;331&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;351&quot; data-start=&quot;331&quot;&gt;서버리스: 인프라 관리 필요 없음&lt;/li&gt;
&lt;li data-end=&quot;379&quot; data-start=&quot;352&quot;&gt;자동화: 데이터 카탈로그 생성 및 스키마 추론&lt;/li&gt;
&lt;li data-end=&quot;405&quot; data-start=&quot;380&quot;&gt;유연성: Spark 기반(분산 처리 가능)&lt;/li&gt;
&lt;li data-end=&quot;452&quot; data-start=&quot;406&quot;&gt;통합: S3, RDS, Redshift, DynamoDB 등과 원활하게 연동&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;520&quot; data-start=&quot;454&quot; data-ke-size=&quot;size16&quot;&gt;즉, Glue는 데이터 엔지니어가 &lt;b&gt;복잡한 ETL 파이프라인을 쉽고 빠르게 구성&lt;/b&gt;하도록 돕는 서비스.&lt;/p&gt;
&lt;h3 data-end=&quot;520&quot; data-start=&quot;454&quot; data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;2. 아키텍처 개념도&lt;/h3&gt;
&lt;pre id=&quot;code_1757330907996&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        ┌───────────────────┐
        │    데이터 소스     │ (S3, RDS, DynamoDB 등)
        └─────────┬─────────┘
                  │
                  ▼
          ┌───────────────┐
          │ Glue Crawler  │ &amp;rarr; 메타데이터 추출 (스키마 자동 생성)
          └───────────────┘
                  │
                  ▼
          ┌───────────────┐
          │ Glue Catalog  │ &amp;rarr; 데이터베이스/테이블 메타데이터 저장
          └───────────────┘
                  │
                  ▼
          ┌───────────────┐
          │ Glue Job      │ &amp;rarr; ETL 코드(PySpark) 실행
          └───────────────┘
                  │
                  ▼
        ┌───────────────────┐
        │   대상 저장소      │ (S3, Redshift, RDS 등)
        └───────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1277&quot; data-start=&quot;1264&quot; data-ke-size=&quot;size26&quot;&gt;3. 주요 컴포넌트&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1585&quot; data-start=&quot;1279&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1359&quot; data-start=&quot;1279&quot;&gt;&lt;b&gt;Crawler&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1359&quot; data-start=&quot;1299&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1355&quot; data-start=&quot;1299&quot;&gt;데이터 소스를 자동으로 스캔해 &lt;b&gt;스키마를 추론&lt;/b&gt;하고 Glue Catalog에 테이블 생성.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1474&quot; data-start=&quot;1360&quot;&gt;&lt;b&gt;Data Catalog&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1474&quot; data-start=&quot;1385&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1408&quot; data-start=&quot;1385&quot;&gt;Glue의 핵심 메타데이터 저장소.&lt;/li&gt;
&lt;li data-end=&quot;1474&quot; data-start=&quot;1412&quot;&gt;테이블, 스키마, 위치 정보를 저장. Athena, Redshift Spectrum 등에서도 활용 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1537&quot; data-start=&quot;1476&quot;&gt;&lt;b&gt;Job&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1537&quot; data-start=&quot;1492&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1506&quot; data-start=&quot;1492&quot;&gt;ETL 실행 단위.&lt;/li&gt;
&lt;li data-end=&quot;1537&quot; data-start=&quot;1510&quot;&gt;PySpark 기반 코드 자동 생성 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1585&quot; data-start=&quot;1539&quot;&gt;&lt;b&gt;Trigger&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1585&quot; data-start=&quot;1559&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1585&quot; data-start=&quot;1559&quot;&gt;스케줄링 혹은 이벤트 기반 실행을 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;1264&quot; data-end=&quot;1277&quot; data-ke-size=&quot;size26&quot;&gt;4. Glue Notebook 실행 예제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S3 -&amp;gt; 변환 -&amp;gt; S3 파이프라인의 예제.&lt;/p&gt;
&lt;pre id=&quot;code_1757331063156&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from awsglue.context import GlueContext
from pyspark.context import SparkContext

# GlueContext 생성
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

# S3에서 데이터 읽기
datasource = glueContext.create_dynamic_frame.from_options(
    connection_type=&quot;s3&quot;,
    connection_options={&quot;paths&quot;: [&quot;s3://my-bucket/input/&quot;]},
    format=&quot;csv&quot;,
    format_options={&quot;withHeader&quot;: True}
)

# 변환 예시: 컬럼 매핑
transformed = datasource.apply_mapping([
    (&quot;id&quot;, &quot;string&quot;, &quot;user_id&quot;, &quot;string&quot;),
    (&quot;name&quot;, &quot;string&quot;, &quot;user_name&quot;, &quot;string&quot;),
    (&quot;age&quot;, &quot;string&quot;, &quot;user_age&quot;, &quot;int&quot;)
])

# 결과 확인 (Notebook은 display() 가능)
transformed.show()

# 변환된 데이터를 다시 S3에 저장
glueContext.write_dynamic_frame.from_options(
    frame=transformed,
    connection_type=&quot;s3&quot;,
    connection_options={&quot;path&quot;: &quot;s3://my-bucket/output/&quot;},
    format=&quot;parquet&quot;
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;2729&quot; data-start=&quot;2713&quot; data-ke-size=&quot;size26&quot;&gt;5. 실무 활용 시나리오&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2913&quot; data-start=&quot;2731&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2798&quot; data-start=&quot;2731&quot;&gt;&lt;b&gt;데이터 레이크 구축&lt;/b&gt;: S3에 저장된 다양한 원천 데이터를 카탈로그화 후 Athena/Redshift로 분석&lt;/li&gt;
&lt;li data-end=&quot;2858&quot; data-start=&quot;2799&quot;&gt;&lt;b&gt;ETL 파이프라인 자동화&lt;/b&gt;: 매일 크롤링된 로그 데이터를 정제하여 S3/Redshift에 적재&lt;/li&gt;
&lt;li data-end=&quot;2913&quot; data-start=&quot;2859&quot;&gt;&lt;b&gt;서버리스 데이터 엔지니어링&lt;/b&gt;: Spark 클러스터 관리 부담 없이 대규모 데이터 처리&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AWS</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/81</guid>
      <comments>https://cool-ri.tistory.com/81#entry81comment</comments>
      <pubDate>Mon, 8 Sep 2025 20:33:29 +0900</pubDate>
    </item>
    <item>
      <title>PySpark - DeltaTable 주요 method 정리</title>
      <link>https://cool-ri.tistory.com/80</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;44&quot; data-end=&quot;69&quot;&gt;DeltaTable 주요 메서드 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 테이블 접근&lt;/p&gt;
&lt;pre id=&quot;code_1756969616692&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from delta.tables import DeltaTable

# 경로 기반으로 불러오기
delta_table = DeltaTable.forPath(spark, &quot;/mnt/delta/user_metrics&quot;)

# 테이블 이름 기반으로 불러오기
delta_table = DeltaTable.forName(spark, &quot;default.user_metrics&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. MERGE (업서트)&lt;/p&gt;
&lt;pre id=&quot;code_1756969634658&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;delta_table.alias(&quot;t&quot;).merge(
    df_updates.alias(&quot;s&quot;),
    &quot;t.user_id = s.user_id AND t.date = s.date&quot;
).whenMatchedUpdateAll() \
 .whenNotMatchedInsertAll() \
 .execute()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Update&lt;/p&gt;
&lt;pre id=&quot;code_1756969650421&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from pyspark.sql.functions import col, lit

delta_table.update(
    condition=col(&quot;cnt&quot;) &amp;gt; 100,
    set={&quot;flag&quot;: lit(1)}
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Delete&lt;/p&gt;
&lt;pre id=&quot;code_1756969664128&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;delta_table.delete(condition=col(&quot;date&quot;) &amp;lt; &quot;2025-01-01&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. Optimize &amp;amp; Z-Order&lt;/p&gt;
&lt;pre id=&quot;code_1756969681702&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 작은 파일 합치기 (compaction)
delta_table.optimize().executeCompaction()

# 특정 컬럼 기준으로 정렬 (Z-Order)
delta_table.optimize().executeZOrderBy(&quot;date&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. Vacuum&lt;/p&gt;
&lt;pre id=&quot;code_1756969697229&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;delta_table.vacuum()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. Time Travel&lt;/p&gt;
&lt;pre id=&quot;code_1756969711107&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 버전 기준 조회
df_old = spark.read.option(&quot;versionAsOf&quot;, 5).table(&quot;user_metrics&quot;)

# 타임스탬프 기준 조회
df_old = spark.read.option(&quot;timestampAsOf&quot;, &quot;2025-09-01&quot;).table(&quot;user_metrics&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. Change Data Feed&lt;/p&gt;
&lt;pre id=&quot;code_1756969725554&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;stream_df = spark.readStream \
    .option(&quot;readChangeFeed&quot;, &quot;true&quot;) \
    .table(&quot;user_metrics&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간략 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 101.047%;&quot; border=&quot;1&quot; data-end=&quot;947&quot; data-start=&quot;71&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.1395%;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot;&gt;&lt;b&gt;메서드 / 옵션&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;305&quot; data-start=&quot;210&quot;&gt;
&lt;td style=&quot;width: 18.1395%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;228&quot; data-start=&quot;210&quot;&gt;테이블 불러오기&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot; data-col-size=&quot;md&quot; data-end=&quot;282&quot; data-start=&quot;228&quot;&gt;forPath(spark, path), forName(spark, tableName)&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot; data-col-size=&quot;md&quot; data-end=&quot;305&quot; data-start=&quot;282&quot;&gt;Delta 테이블을 객체로 불러오기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;391&quot; data-start=&quot;306&quot;&gt;
&lt;td style=&quot;width: 18.1395%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;327&quot; data-start=&quot;306&quot;&gt;업서트(Upsert)&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot; data-col-size=&quot;md&quot; data-end=&quot;367&quot; data-start=&quot;327&quot;&gt;.merge()&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot; data-col-size=&quot;md&quot; data-end=&quot;391&quot; data-start=&quot;367&quot;&gt;조건 맞으면 업데이트, 없으면 인서트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;469&quot; data-start=&quot;392&quot;&gt;
&lt;td style=&quot;width: 18.1395%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;410&quot; data-start=&quot;392&quot;&gt;조건 기반 수정&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot; data-col-size=&quot;md&quot; data-end=&quot;450&quot; data-start=&quot;410&quot;&gt;.update(), .updateExpr()&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot; data-col-size=&quot;md&quot; data-end=&quot;469&quot; data-start=&quot;450&quot;&gt;특정 조건 만족 시 값 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;547&quot; data-start=&quot;470&quot;&gt;
&lt;td style=&quot;width: 18.1395%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;488&quot; data-start=&quot;470&quot;&gt;조건 기반 삭제&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot; data-col-size=&quot;md&quot; data-end=&quot;528&quot; data-start=&quot;488&quot;&gt;.delete()&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot; data-col-size=&quot;md&quot; data-end=&quot;547&quot; data-start=&quot;528&quot;&gt;특정 조건 만족 시 행 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;690&quot; data-start=&quot;548&quot;&gt;
&lt;td style=&quot;width: 18.1395%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;567&quot; data-start=&quot;548&quot;&gt;성능 최적화&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot; data-col-size=&quot;md&quot; data-end=&quot;643&quot; data-start=&quot;567&quot;&gt;.optimize().executeCompaction() &lt;br /&gt;.optimize().executeZOrderBy(col)&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot; data-col-size=&quot;md&quot; data-end=&quot;690&quot; data-start=&quot;643&quot;&gt;작은 파일 합치기(Compaction), 특정 컬럼 기준 정렬(Z-Order)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;774&quot; data-start=&quot;691&quot;&gt;
&lt;td style=&quot;width: 18.1395%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;711&quot; data-start=&quot;691&quot;&gt;파일 정리(Vacuum)&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot; data-col-size=&quot;md&quot; data-end=&quot;751&quot; data-start=&quot;711&quot;&gt;.vacuum()&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot; data-col-size=&quot;md&quot; data-end=&quot;774&quot; data-start=&quot;751&quot;&gt;오래된 스냅샷 및 불필요 파일 정리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;854&quot; data-start=&quot;775&quot;&gt;
&lt;td style=&quot;width: 18.1395%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;795&quot; data-start=&quot;775&quot;&gt;Time Travel&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot; data-col-size=&quot;md&quot; data-end=&quot;834&quot; data-start=&quot;795&quot;&gt;versionAsOf, timestampAsOf 옵션&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot; data-col-size=&quot;md&quot; data-end=&quot;854&quot; data-start=&quot;834&quot;&gt;과거 버전/시점의 데이터 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;947&quot; data-start=&quot;855&quot;&gt;
&lt;td style=&quot;width: 18.1395%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;875&quot; data-start=&quot;855&quot;&gt;변경 추적(CDF)&lt;/td&gt;
&lt;td style=&quot;width: 41.2791%;&quot; data-col-size=&quot;md&quot; data-end=&quot;914&quot; data-start=&quot;875&quot;&gt;readChangeFeed=true 옵션&lt;/td&gt;
&lt;td style=&quot;width: 41.6279%;&quot; data-col-size=&quot;md&quot; data-end=&quot;947&quot; data-start=&quot;914&quot;&gt;Insert/Update/Delete 변경 이력 추적&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Programming/Python</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/80</guid>
      <comments>https://cool-ri.tistory.com/80#entry80comment</comments>
      <pubDate>Thu, 4 Sep 2025 16:11:10 +0900</pubDate>
    </item>
    <item>
      <title>PySpark - ETL 코드 흐름</title>
      <link>https://cool-ri.tistory.com/79</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;PySpark&amp;nbsp;-&amp;nbsp;ETL&amp;nbsp;코드&amp;nbsp;흐름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 데이터 읽기&lt;/p&gt;
&lt;pre id=&quot;code_1756966302193&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### 데이터 읽기 extract 

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName(&quot;ETLExample&quot;).getOrCreate()

# CSV 읽기
df_csv = spark.read.option(&quot;header&quot;, True).csv(&quot;/mnt/data/input/sample.csv&quot;)

# Parquet 읽기
df_parquet = spark.read.parquet(&quot;/mnt/data/input/sample.parquet&quot;)

# Delta 읽기
df_delta = spark.read.format(&quot;delta&quot;).load(&quot;/mnt/delta/sample_delta&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 데이터 변환&lt;/p&gt;
&lt;pre id=&quot;code_1756966388746&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### 데이터 변환 transform

from pyspark.sql.functions import col, when, to_date, count, avg

df_transformed = (
    df_csv
    .withColumn(&quot;date&quot;, to_date(col(&quot;timestamp&quot;))) #날짜 컬럼 변환
    .withColumn(&quot;status&quot;, when(col(&quot;status&quot;) == &quot;OK&quot;, 1).otherwise(0)) #상태값 가공
    .groupBy(&quot;user_id&quot;, &quot;date&quot;) #집계
    .agg(
        count(&quot;*&quot;).alias(&quot;cnt&quot;),
        avg(&quot;value&quot;).alias(&quot;avg_value&quot;)
    )
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 데이터 적재&lt;/p&gt;
&lt;pre id=&quot;code_1756966395021&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### 데이터 적재 Load

# databricks 에선 Delta Lake 로 저장하는 패턴을 많이 쓴다.

from delta.tables import DeltaTable

# Delta 테이블이 이미 있을 경우 Merge(Upsert)
target_path = &quot;/mnt/delta/user_metrics&quot;

if DeltaTable.isDeltaTable(spark, target_path): # target_path 경로에 Delta 테이블 있는지 확인, 있으면 upsert 없으면 새로 저장 write 
    delta_table = DeltaTable.forPath(spark, target_path)  # 이미 있는 Delta 테이블을 가져와서 조작할 수 있는 객체 생성
    (
        delta_table.alias(&quot;t&quot;).merge(
            df_transformed.alias(&quot;s&quot;),
            &quot;t.user_id = s.user_id AND t.date = s.date&quot;
        )
        .whenMatchedUpdateAll()
        .whenNotMatchedInsertAll()
        .execute()
    )
else:
    df_transformed.write.format(&quot;delta&quot;).mode(&quot;overwrite&quot;).save(target_path)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming/Python</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/79</guid>
      <comments>https://cool-ri.tistory.com/79#entry79comment</comments>
      <pubDate>Thu, 4 Sep 2025 15:13:23 +0900</pubDate>
    </item>
    <item>
      <title>Alertmanager 다운로드 &amp;amp; 설치</title>
      <link>https://cool-ri.tistory.com/78</link>
      <description>&lt;h1 data-end=&quot;254&quot; data-start=&quot;227&quot;&gt;1. Alertmanager 다운로드 &amp;amp; 설치&lt;/h1&gt;
&lt;p data-end=&quot;362&quot; data-start=&quot;256&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;공식 사이트&lt;/b&gt;:&lt;br /&gt;&lt;a href=&quot;https://prometheus.io/download/#alertmanager&quot;&gt;https://prometheus.io/download/#alertmanager&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;376&quot; data-start=&quot;364&quot; data-ke-size=&quot;size23&quot;&gt;리눅스 (예시)&lt;/h3&gt;
&lt;pre id=&quot;code_1745846589286&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /opt
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
tar -xvf alertmanager-0.26.0.linux-amd64.tar.gz
mv alertmanager-0.26.0.linux-amd64 alertmanager
cd alertmanager&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 구조 예시:&lt;/p&gt;
&lt;pre id=&quot;code_1745846604469&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Alertmanager\
  ├── alertmanager.exe
  ├── amtool.exe
  ├── alertmanager.yaml (설정파일)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 data-end=&quot;927&quot; data-start=&quot;880&quot;&gt;2. Alertmanager 설정 파일 작성 (alertmanager.yaml)&lt;/h1&gt;
&lt;p data-end=&quot;1020&quot; data-start=&quot;929&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;경로:&lt;/b&gt; Alertmanager 실행파일(alertmanager.exe)이 있는 디렉토리에 &lt;b&gt;alertmanager.yaml&lt;/b&gt; 파일 만들어야 함.&lt;/p&gt;
&lt;p data-end=&quot;1044&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 설정 예시 (메일 알림용):&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745846621084&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;global:
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'alert@example.com'
  smtp_auth_username: 'alert@example.com'
  smtp_auth_password: 'your_password'

route:
  receiver: email-alert

receivers:
- name: email-alert
  email_configs:
  - to: 'your_target_email@example.com'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 data-end=&quot;1438&quot; data-start=&quot;1418&quot;&gt;3. Alertmanager 실행&lt;/h1&gt;
&lt;pre id=&quot;code_1745846817484&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;./alertmanager --config.file=alertmanager.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 포트는 9093으로 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 data-end=&quot;1654&quot; data-start=&quot;1619&quot;&gt;4. Prometheus에 Alertmanager 연동 설정&lt;/h1&gt;
&lt;p data-end=&quot;1704&quot; data-start=&quot;1656&quot; data-ke-size=&quot;size16&quot;&gt;prometheus.yaml 파일을 수정해서 Alertmanager를 연결해야 한다.&lt;/p&gt;
&lt;p data-end=&quot;1720&quot; data-start=&quot;1706&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수정할 부분 예시:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745846843737&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 'localhost:9093'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;localhost:9093 = Prometheus와 Alertmanager가 같은 서버 안에 있기 때문에 localhost 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 data-end=&quot;1925&quot; data-start=&quot;1906&quot;&gt;5. Prometheus 재시작&lt;/h1&gt;
&lt;p data-end=&quot;1957&quot; data-start=&quot;1927&quot; data-ke-size=&quot;size16&quot;&gt;설정 반영하려면 Prometheus를 재시작해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1745846863984&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl restart prometheus&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 디렉토리 구조 예시&lt;/p&gt;
&lt;pre id=&quot;code_1745846895064&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Prometheus\
  ├── prometheus.exe
  ├── prometheus.yaml
  ├── rules\
      ├── iis_service_alert.yaml

C:\Alertmanager\
  ├── alertmanager.exe
  ├── amtool.exe
  ├── alertmanager.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알림 흐름도 예시&lt;/p&gt;
&lt;pre id=&quot;code_1745847175695&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Windows 서버 (wmi_exporter)
   &amp;darr; (9183)
Prometheus (Alert Rule 체크)
   &amp;darr; (발생)
Alertmanager (메일 발송)
   &amp;darr;
관리자 이메일 수신&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Monitoring/Prometheus</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/78</guid>
      <comments>https://cool-ri.tistory.com/78#entry78comment</comments>
      <pubDate>Mon, 28 Apr 2025 22:35:12 +0900</pubDate>
    </item>
    <item>
      <title>Alertmanager 메일 알림 기능 추가</title>
      <link>https://cool-ri.tistory.com/77</link>
      <description>&lt;h1 data-end=&quot;1630&quot; data-start=&quot;1603&quot;&gt;1. Alertmanager로 메일 알림 설정&lt;/h1&gt;
&lt;h2 data-end=&quot;1663&quot; data-start=&quot;1632&quot; data-ke-size=&quot;size26&quot;&gt;1.1 Prometheus alert rule 작성&lt;/h2&gt;
&lt;p data-end=&quot;1710&quot; data-start=&quot;1665&quot; data-ke-size=&quot;size16&quot;&gt;Prometheus 가 설치된 서버에 추가하면 된다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;파일&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 79.5349%;&quot;&gt;설치 위치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;iis_service_alert.yaml&lt;/td&gt;
&lt;td style=&quot;width: 79.5349%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;Prometheus 서버 내,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;rules 디렉토리&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(예: /etc/prometheus/rules/ 또는 C:\Prometheus\rules\)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-end=&quot;1710&quot; data-start=&quot;1665&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(※ rules 디렉토리 없다면 그냥 만들어도 됨.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1710&quot; data-start=&quot;1665&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1710&quot; data-start=&quot;1665&quot; data-ke-size=&quot;size16&quot;&gt;새 Alert rule 파일 (iis_service_alert.yaml) 예시:&lt;/p&gt;
&lt;pre id=&quot;code_1745844715309&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;groups:
- name: IIS Service Alerts
  rules:
  - alert: IISServiceDown
    expr: wmi_service_status{service=&quot;W3SVC&quot;} == 0
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: &quot;IIS 서비스 다운&quot;
      description: &quot;IIS (W3SVC) 서비스가 2분 이상 죽어있습니다.&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2024&quot; data-start=&quot;1992&quot;&gt;for: 2m &amp;rarr; 2분 이상 다운된 경우 알람 발생&lt;/li&gt;
&lt;li data-end=&quot;2044&quot; data-start=&quot;2025&quot;&gt;필요시 1m, 5m로 조정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prometheus.yaml에 alert rule 등록&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;파일&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 83.1395%;&quot;&gt;위치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;prometheus.yaml&lt;/td&gt;
&lt;td style=&quot;width: 83.1395%;&quot;&gt;Prometheus 메인 설정 파일, 보통 /etc/prometheus/prometheus.yml 또는 C:\Prometheus\prometheus.yml&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745844740131&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'windows_exporter'
    static_configs:
      - targets: ['서버IP:9182']

  - job_name: 'wmi_exporter'
    static_configs:
      - targets: ['서버IP:9183']

rule_files:
  - &quot;rules/iis_service_alert.yaml&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;rule_files는 scrape_configs 끝난 뒤&lt;/b&gt; 추가하면 된다.&lt;br /&gt;(즉, scrape_configs: 블록과 나란히 존재해야 한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;2167&quot; data-start=&quot;2139&quot; data-ke-size=&quot;size26&quot;&gt;1.2 Alertmanager 메일 설정 예시&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Alertmanager : Prometheus 가 보낸 알람을 받아서 외부로 알리는 소프트웨어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cool-ri.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cool-ri.tistory.com/78&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1745847340437&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Alertmanager 다운로드 &amp;amp; 설치&quot; data-og-description=&quot;1. Alertmanager 다운로드 &amp;amp; 설치공식 사이트:https://prometheus.io/download/#alertmanager리눅스 (예시)cd /optwget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gztar -xvf alertmanager&quot; data-og-host=&quot;cool-ri.tistory.com&quot; data-og-source-url=&quot;https://cool-ri.tistory.com/78&quot; data-og-url=&quot;https://cool-ri.tistory.com/78&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VUlED/hyYIfdqA0V/YLe1QRaDEhZYHsgaSk5RsK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/UCRaq/hyYL6T4j3e/4WKAJqGI6dmgl0sx7IxJak/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/wuXil/hyYIapC6QP/jC0Ihql3Dg5rNFfCh99sKK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://cool-ri.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cool-ri.tistory.com/78&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VUlED/hyYIfdqA0V/YLe1QRaDEhZYHsgaSk5RsK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/UCRaq/hyYL6T4j3e/4WKAJqGI6dmgl0sx7IxJak/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/wuXil/hyYIapC6QP/jC0Ihql3Dg5rNFfCh99sKK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Alertmanager 다운로드 &amp;amp; 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. Alertmanager 다운로드 &amp;amp; 설치공식 사이트:https://prometheus.io/download/#alertmanager리눅스 (예시)cd /optwget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gztar -xvf alertmanager&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cool-ri.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 34px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.7907%; height: 17px;&quot;&gt;파일&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 82.2093%; height: 17px;&quot;&gt;설치 위치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.7907%; height: 17px;&quot;&gt;alertmanager.yaml&lt;/td&gt;
&lt;td style=&quot;width: 82.2093%; height: 17px;&quot;&gt;Alertmanager 설정 파일, 보통 /etc/alertmanager/alertmanager.yaml 또는 C:\Alertmanager\alertmanager.yaml&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-end=&quot;2191&quot; data-start=&quot;2169&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2191&quot; data-start=&quot;2169&quot; data-ke-size=&quot;size16&quot;&gt;alertmanager.yaml 예시:&lt;/p&gt;
&lt;pre id=&quot;code_1745844752545&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;global:
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'alert@example.com'
  smtp_auth_username: 'your_email@example.com'
  smtp_auth_password: 'your_password'

route:
  receiver: email-alert

receivers:
- name: email-alert
  email_configs:
  - to: 'your_target_email@example.com'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SMTP 설정은 회사/개인 메일 서버에 맞춰 수정해야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745845846193&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Prometheus]
  - 서버 상태 모니터링
  - 알람 발생

    &amp;darr; 알람 전송

[Alertmanager]
  - 알람 수신
  - 메일 발송, Slack 발송 등

    &amp;darr;

[관리자 이메일, Slack 채널]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Monitoring/Prometheus</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/77</guid>
      <comments>https://cool-ri.tistory.com/77#entry77comment</comments>
      <pubDate>Mon, 28 Apr 2025 21:55:45 +0900</pubDate>
    </item>
    <item>
      <title>Windows 서버에 windows_exporter &amp;amp; wmi_exporter 설치 방법</title>
      <link>https://cool-ri.tistory.com/76</link>
      <description>&lt;h1 data-end=&quot;165&quot; data-start=&quot;129&quot;&gt;Windows 서버에 windows_exporter 설치 방법&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSI 설치 -&amp;gt; 서비스 확인 -&amp;gt; 포트 오픈 -&amp;gt; Prometheus 등록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;194&quot; data-start=&quot;167&quot; data-ke-size=&quot;size26&quot;&gt;1. windows_exporter 다운로드&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;446&quot; data-start=&quot;196&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;356&quot; data-start=&quot;196&quot;&gt;공식 GitHub 페이지 접속:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;356&quot; data-start=&quot;220&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;356&quot; data-start=&quot;220&quot;&gt;&lt;a href=&quot;https://github.com/prometheus-community/windows_exporter/releases&quot;&gt;https://github.com/prometheus-community/windows_exporter/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;446&quot; data-start=&quot;358&quot;&gt;최신 버전(zip 파일 또는 msi 설치 파일)을 다운로드한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;446&quot; data-start=&quot;400&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;446&quot; data-start=&quot;400&quot;&gt;보통 .msi 파일이 편하다 (windows_exporter-*.msi)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-end=&quot;478&quot; data-start=&quot;453&quot; data-ke-size=&quot;size26&quot;&gt;2. windows_exporter 설치&lt;/h2&gt;
&lt;p data-end=&quot;496&quot; data-start=&quot;480&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;MSI 파일 설치 방법&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;635&quot; data-start=&quot;498&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;522&quot; data-start=&quot;498&quot;&gt;다운로드한 .msi 파일 더블 클릭&lt;/li&gt;
&lt;li data-end=&quot;535&quot; data-start=&quot;523&quot;&gt;설치 마법사 실행&lt;/li&gt;
&lt;li data-end=&quot;626&quot; data-start=&quot;536&quot;&gt;설치 옵션 확인:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;626&quot; data-start=&quot;552&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;606&quot; data-start=&quot;552&quot;&gt;설치 경로(Default: C:\Program Files\windows_exporter\)&lt;/li&gt;
&lt;li data-end=&quot;626&quot; data-start=&quot;610&quot;&gt;기본 포트(9182) 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;635&quot; data-start=&quot;627&quot;&gt;설치 완료&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;680&quot; data-start=&quot;637&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(설치가 끝나면 자동으로 Windows 서비스로 등록되고, 실행된다.)&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;680&quot; data-start=&quot;637&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;705&quot; data-start=&quot;687&quot; data-ke-size=&quot;size26&quot;&gt;3. 서비스 정상 실행 확인&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;794&quot; data-start=&quot;707&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;743&quot; data-start=&quot;707&quot;&gt;Windows 서비스(services.msc) 들어간다.&lt;/li&gt;
&lt;li data-end=&quot;794&quot; data-start=&quot;744&quot;&gt;windows_exporter라는 서비스가 Running(실행 중)인지 확인한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;815&quot; data-start=&quot;796&quot; data-ke-size=&quot;size16&quot;&gt;또는 PowerShell에서 확인:&lt;/p&gt;
&lt;pre id=&quot;code_1745843058808&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Get-Service windows_exporter&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태가 Running이면 정상.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;913&quot; data-start=&quot;891&quot; data-ke-size=&quot;size26&quot;&gt;4. 방화벽 포트 열기 (선택사항)&lt;/h2&gt;
&lt;p data-end=&quot;953&quot; data-start=&quot;915&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 포트 9182&lt;/b&gt;를 외부에서 접근할 수 있도록 열어야 한다.&lt;/p&gt;
&lt;p data-end=&quot;970&quot; data-start=&quot;955&quot; data-ke-size=&quot;size16&quot;&gt;PowerShell 명령어:&lt;/p&gt;
&lt;pre id=&quot;code_1745843075256&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;New-NetFirewallRule -DisplayName &quot;Allow windows_exporter 9182&quot; -Direction Inbound -Protocol TCP -LocalPort 9182 -Action Allow&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1162&quot; data-start=&quot;1150&quot; data-ke-size=&quot;size26&quot;&gt;5. 동작 테스트&lt;/h2&gt;
&lt;p data-end=&quot;1183&quot; data-start=&quot;1164&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버에서 바로 접속 테스트:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745843088350&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl http://localhost:9182/metrics&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메트릭스 텍스트가 쭉 나오면 정상 설치된 거다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1353&quot; data-start=&quot;1313&quot; data-ke-size=&quot;size26&quot;&gt;6. Prometheus에 windows_exporter 타겟 추가&lt;/h2&gt;
&lt;p data-end=&quot;1400&quot; data-start=&quot;1355&quot; data-ke-size=&quot;size16&quot;&gt;Prometheus 설정 파일(prometheus.yml)에 아래 블록 추가:&lt;/p&gt;
&lt;pre id=&quot;code_1745843104257&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- job_name: 'windows_exporter'
  static_configs:
    - targets: ['서버IP:9182']&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1537&quot; data-start=&quot;1493&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1537&quot; data-start=&quot;1493&quot;&gt;서버IP는 windows_exporter가 설치된 서버 IP로 바꿔야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1570&quot; data-start=&quot;1539&quot; data-ke-size=&quot;size16&quot;&gt;Prometheus 재시작 후 정상 스크래핑 여부 확인.&lt;/p&gt;
&lt;p data-end=&quot;1570&quot; data-start=&quot;1539&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1570&quot; data-start=&quot;1539&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS 서비스 활성화를 확인하기 위해 wmi_exporter 도 따로 추가할 예정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;280&quot; data-start=&quot;257&quot; data-ke-size=&quot;size26&quot;&gt;wmi_exporter 설치 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;257&quot; data-end=&quot;280&quot;&gt;1. wmi_exporter 다운로드&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot; data-start=&quot;282&quot; data-end=&quot;576&quot;&gt;
&lt;li data-start=&quot;282&quot; data-end=&quot;385&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/prometheus-community/windows_exporter/releases/tag/v0.7.0&quot; data-start=&quot;285&quot; data-end=&quot;382&quot;&gt;공식 GitHub 릴리즈 페이지&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접속&lt;/li&gt;
&lt;li data-start=&quot;386&quot; data-end=&quot;426&quot;&gt;&lt;b&gt;wmi_exporter-0.7.0-amd64.msi&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;다운로드&lt;/li&gt;
&lt;li data-start=&quot;427&quot; data-end=&quot;455&quot;&gt;다운로드한 .msi 파일 더블클릭 &amp;rarr; 설치&lt;/li&gt;
&lt;li data-start=&quot;456&quot; data-end=&quot;576&quot;&gt;설치 옵션
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;468&quot; data-end=&quot;576&quot;&gt;
&lt;li data-start=&quot;468&quot; data-end=&quot;515&quot;&gt;설치 경로: 기본값 (C:\Program Files\wmi_exporter\)&lt;/li&gt;
&lt;li data-start=&quot;519&quot; data-end=&quot;576&quot;&gt;포트:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;9183번&lt;/b&gt;으로 바꿔야 한다 (windows_exporter는 9182 쓰고 있으니까)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;638&quot; data-end=&quot;659&quot;&gt;2. 포트 다르게 해서 windows exporter 와 동시에 실행&lt;/h1&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;661&quot; data-end=&quot;706&quot;&gt;&lt;b&gt;wmi_exporter 포트를 9183으로 지정해서 설치 후, 서비스 수정&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;708&quot; data-end=&quot;728&quot;&gt;PowerShell 관리자 권한으로:&lt;/p&gt;
&lt;pre id=&quot;code_1745845346183&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;sc stop wmi_exporter
sc config wmi_exporter binPath= &quot;\&quot;C:\Program Files\wmi_exporter\wmi_exporter.exe\&quot; --telemetry.addr=:9183 --collectors.enabled=service&quot;
sc start wmi_exporter&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;929&quot; data-end=&quot;1035&quot;&gt;
&lt;li data-start=&quot;929&quot; data-end=&quot;969&quot;&gt;--telemetry.addr=:9183 &amp;rarr; 9183 포트로 띄움&lt;/li&gt;
&lt;li data-start=&quot;970&quot; data-end=&quot;1035&quot;&gt;--collectors.enabled=service &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;서비스 상태만 수집하도록 collector 설정&lt;/b&gt;&lt;/li&gt;
&lt;li data-start=&quot;970&quot; data-end=&quot;1035&quot;&gt;&lt;b&gt;즉, wmi_exporter는 서비스 상태만 가져오게 제한함. (IIS 서비스만 볼 거니까.)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버에서 포트 개방 방법 (Windows 기준)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;PowerShell 관리자 권한으로 실행:&lt;/p&gt;
&lt;pre id=&quot;code_1745845346184&quot; class=&quot;mipsasm&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;New-NetFirewallRule -DisplayName &quot;Allow wmi_exporter 9183&quot; -Direction Inbound -Protocol TCP -LocalPort 9183 -Action Allow&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start=&quot;887&quot; data-end=&quot;912&quot;&gt;9183 포트만 추가로 열어주면 된다.&lt;/li&gt;
&lt;li data-start=&quot;913&quot; data-end=&quot;970&quot;&gt;Hiware 접속이든 RDP 접속이든&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;포트 개방은 서버 방화벽 설정 기준&lt;/b&gt;이라 무조건 필요&lt;/li&gt;
&lt;li data-start=&quot;913&quot; data-end=&quot;970&quot;&gt;&lt;b&gt;만약 회사 네트워크 방화벽(외부-내부 사이 방화벽)이 또 존재하면&lt;/b&gt;&lt;br /&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;네트워크팀에도 요청해서 9183 인바운드 허용해달라고 해야 한다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;1102&quot; data-end=&quot;1134&quot;&gt;3. Prometheus 타겟 등록 (9183 포트로)&lt;/h1&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;1136&quot; data-end=&quot;1160&quot;&gt;prometheus.yml에 타겟 추가:&lt;/p&gt;
&lt;pre id=&quot;code_1745845346185&quot; class=&quot;groovy&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;- job_name: 'wmi_exporter_service'
  static_configs:
    - targets: ['서버IP:9183']&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존 windows_exporter(9182)랑 따로 등록해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;1304&quot; data-end=&quot;1337&quot;&gt;4. Prometheus 쿼리로 IIS 서비스 상태 체크&lt;/h1&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;1339&quot; data-end=&quot;1370&quot;&gt;&lt;b&gt;wmi_exporter는 아래 메트릭을 제공한다:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745845346185&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;wmi_service_status{service=&quot;W3SVC&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;W3SVC = IIS의 핵심 서비스 이름 (World Wide Web Publishing Service)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;1485&quot; data-end=&quot;1494&quot;&gt;&lt;b&gt;값 해석:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;1495&quot; data-end=&quot;1596&quot;&gt;
&lt;li data-start=&quot;1495&quot; data-end=&quot;1546&quot;&gt;wmi_service_status{service=&quot;W3SVC&quot;} == 1 &amp;rarr; 살아있음&lt;/li&gt;
&lt;li data-start=&quot;1547&quot; data-end=&quot;1596&quot;&gt;wmi_service_status{service=&quot;W3SVC&quot;} == 0 &amp;rarr; 죽음&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Monitoring/Prometheus</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/76</guid>
      <comments>https://cool-ri.tistory.com/76#entry76comment</comments>
      <pubDate>Mon, 28 Apr 2025 21:25:59 +0900</pubDate>
    </item>
    <item>
      <title>IIS (Internet Information Services) 정의</title>
      <link>https://cool-ri.tistory.com/75</link>
      <description>&lt;h1 data-end=&quot;175&quot; data-start=&quot;137&quot;&gt;IIS(Internet Information Services)란?&lt;/h1&gt;
&lt;p data-end=&quot;275&quot; data-start=&quot;183&quot; data-ke-size=&quot;size16&quot;&gt;IIS(Internet Information Services)는 &lt;b&gt;Windows 운영체제&lt;/b&gt;에 기본 포함된 &lt;b&gt;웹 서버(HTTP 서버)&lt;/b&gt; 소프트웨어.&lt;/p&gt;
&lt;p data-end=&quot;377&quot; data-start=&quot;277&quot; data-ke-size=&quot;size16&quot;&gt;웹 브라우저가 보내는 요청을 받아, 웹페이지(HTML, CSS, JS) 나 웹 애플리케이션(ASP.NET, PHP) 의 결과를 사용자에게 전달하는 역할을 한다.&lt;/p&gt;
&lt;p data-end=&quot;437&quot; data-start=&quot;379&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;주요 기능&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;744&quot; data-start=&quot;454&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; 기능 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;520&quot; data-start=&quot;478&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;492&quot; data-start=&quot;478&quot;&gt;웹 서버 (HTTP)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;520&quot; data-start=&quot;492&quot;&gt;브라우저 요청을 받고 웹사이트, 웹앱을 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;557&quot; data-start=&quot;521&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;529&quot; data-start=&quot;521&quot;&gt;파일 서버&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;557&quot; data-start=&quot;529&quot;&gt;이미지, 문서 등 정적 파일을 다운로드 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;594&quot; data-start=&quot;558&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;571&quot; data-start=&quot;558&quot;&gt;ASP.NET 통합&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;594&quot; data-start=&quot;571&quot;&gt;C# 기반 웹사이트/웹앱 실행 지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;624&quot; data-start=&quot;595&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;605&quot; data-start=&quot;595&quot;&gt;SSL/TLS&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;624&quot; data-start=&quot;605&quot;&gt;HTTPS(보안 통신) 지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;661&quot; data-start=&quot;625&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;638&quot; data-start=&quot;625&quot;&gt;인증 및 권한 설정&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;661&quot; data-start=&quot;638&quot;&gt;로그인 기능, 접근 제한 기능 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;702&quot; data-start=&quot;662&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;671&quot; data-start=&quot;662&quot;&gt;로드 밸런싱&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;702&quot; data-start=&quot;671&quot;&gt;여러 서버로 요청 분산 처리 가능 (ARR 연동)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;744&quot; data-start=&quot;703&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;715&quot; data-start=&quot;703&quot;&gt;로깅 및 모니터링&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;744&quot; data-start=&quot;715&quot;&gt;요청 기록, 에러 기록 등을 통해 시스템 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;IIS 의 구성요소&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1000&quot; data-start=&quot;765&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;b&gt; 구성요소 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;833&quot; data-start=&quot;791&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;803&quot; data-start=&quot;791&quot;&gt;사이트(Site)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;833&quot; data-start=&quot;803&quot;&gt;하나의 웹사이트 단위. 포트 번호, 도메인 할당&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;893&quot; data-start=&quot;834&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;856&quot; data-start=&quot;834&quot;&gt;애플리케이션(Application)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;893&quot; data-start=&quot;856&quot;&gt;사이트 내부의 논리적 구역 (ex: /api, /admin)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;949&quot; data-start=&quot;894&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;915&quot; data-start=&quot;894&quot;&gt;애플리케이션 풀(App Pool)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;949&quot; data-start=&quot;915&quot;&gt;애플리케이션을 실제로 실행하는 워커 프로세스 관리 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1000&quot; data-start=&quot;950&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;970&quot; data-start=&quot;950&quot;&gt;워커 프로세스(w3wp.exe)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1000&quot; data-start=&quot;970&quot;&gt;실제로 코드(C# 등)를 실행하는 OS 프로세스&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Web Server/IIS</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/75</guid>
      <comments>https://cool-ri.tistory.com/75#entry75comment</comments>
      <pubDate>Mon, 28 Apr 2025 20:39:27 +0900</pubDate>
    </item>
    <item>
      <title>windows_exporter ( 구: wmi_exporter ) 정의</title>
      <link>https://cool-ri.tistory.com/74</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;windows_exporter 란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;267&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;windows_exporter&lt;/b&gt;는 Windows 서버의 &lt;b&gt;CPU, 메모리, 디스크, 네트워크 상태&lt;/b&gt; 같은 &lt;b&gt;서버 리소스 메트릭(Metrics)&lt;/b&gt; 을 수집해서 &lt;b&gt;Prometheus&lt;/b&gt;가 가져갈 수 있게 해주는 &lt;b&gt;모니터링 에이전트&lt;/b&gt;다. 원래 이름은 &lt;b&gt;wmi_exporter&lt;/b&gt;였는데, 2020년에 이름이 &lt;b&gt;windows_exporter&lt;/b&gt;로 공식 변경되었다.&lt;/p&gt;
&lt;p data-end=&quot;267&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;267&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;쉽게 말하면: &lt;/b&gt;&quot;&lt;b&gt;Prometheus가 Windows 서버 상태를 모니터링할 수 있게 해주는 프로그램&lt;/b&gt;&quot; 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;436&quot; data-start=&quot;426&quot; data-ke-size=&quot;size26&quot;&gt;왜 필요한가?&lt;/h2&gt;
&lt;p data-end=&quot;541&quot; data-start=&quot;438&quot; data-ke-size=&quot;size16&quot;&gt;Prometheus는 기본적으로 Linux 서버에 최적화된 시스템이라,&lt;br /&gt;&lt;b&gt;Windows 서버 리소스(CPU 사용률, 메모리 사용량, 디스크 상태 등)&lt;/b&gt; 을 직접 수집할 수 없다.&lt;/p&gt;
&lt;p data-end=&quot;623&quot; data-start=&quot;543&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 그래서 Windows 서버에 &lt;b&gt;windows_exporter&lt;/b&gt;를 설치해서, Prometheus가 HTTP로 메트릭을 긁어가게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작동 방식&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;808&quot; data-start=&quot;640&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;699&quot; data-start=&quot;664&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;673&quot; data-start=&quot;664&quot;&gt;서버에 설치&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;699&quot; data-start=&quot;673&quot;&gt;Windows OS에 서비스 형태로 설치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;753&quot; data-start=&quot;700&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;716&quot; data-start=&quot;700&quot;&gt;HTTP 엔드포인트 제공&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;753&quot; data-start=&quot;716&quot;&gt;기본 포트 9182번으로 /metrics 엔드포인트 오픈&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;808&quot; data-start=&quot;754&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;771&quot; data-start=&quot;754&quot;&gt;Prometheus가 수집&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;808&quot; data-start=&quot;771&quot;&gt;Prometheus가 HTTP GET 요청으로 메트릭 가져감&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수집 가능한 메트릭 종류&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1307&quot; data-start=&quot;955&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; 카테고리 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; 메트릭 예시 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1024&quot; data-start=&quot;985&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;991&quot; data-start=&quot;985&quot;&gt;CPU&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1024&quot; data-start=&quot;991&quot;&gt;cpu usage, cpu interrupt rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1073&quot; data-start=&quot;1025&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1031&quot; data-start=&quot;1025&quot;&gt;메모리&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1073&quot; data-start=&quot;1031&quot;&gt;available memory, memory usage percent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1117&quot; data-start=&quot;1074&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1080&quot; data-start=&quot;1074&quot;&gt;디스크&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1117&quot; data-start=&quot;1080&quot;&gt;logical disk usage, read/write IO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1166&quot; data-start=&quot;1118&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1125&quot; data-start=&quot;1118&quot;&gt;네트워크&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1166&quot; data-start=&quot;1125&quot;&gt;network interface bytes sent/received&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1202&quot; data-start=&quot;1167&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1173&quot; data-start=&quot;1167&quot;&gt;시스템&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1202&quot; data-start=&quot;1173&quot;&gt;system uptime, OS version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1250&quot; data-start=&quot;1203&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1209&quot; data-start=&quot;1203&quot;&gt;IIS&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1250&quot; data-start=&quot;1209&quot;&gt;IIS 요청 수, 연결 수 (선택적 collector 활성화 필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1307&quot; data-start=&quot;1251&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1257&quot; data-start=&quot;1251&quot;&gt;서비스&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;1307&quot; data-start=&quot;1257&quot;&gt;Windows 서비스 상태 (ex: 특정 서비스 running/stopped 여부)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 옵션 ( collector 설정 )&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745843466511&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;windows_exporter.exe --collectors.enabled cpu,logical_disk,net,os,system&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;cpu, logical_disk, network, OS, system 메트릭만 활성화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;429&quot; data-start=&quot;142&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;b&gt; 내용 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;214&quot; data-start=&quot;166&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;172&quot; data-start=&quot;166&quot;&gt;풀네임&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;214&quot; data-start=&quot;172&quot;&gt;&lt;b&gt;windows_exporter&lt;/b&gt; (구: wmi_exporter)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;284&quot; data-start=&quot;215&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;221&quot; data-start=&quot;215&quot;&gt;주목적&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;284&quot; data-start=&quot;221&quot;&gt;&lt;b&gt;Windows 서버의 시스템 상태(메트릭)&lt;/b&gt; 를 Prometheus로 수집할 수 있게 해주는 프로그램&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;344&quot; data-start=&quot;285&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;295&quot; data-start=&quot;285&quot;&gt;수집하는 정보&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;344&quot; data-start=&quot;295&quot;&gt;CPU 사용률, 메모리 사용량, 디스크 사용량, 네트워크 트래픽, 서비스 상태 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;388&quot; data-start=&quot;345&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;353&quot; data-start=&quot;345&quot;&gt;설치 형태&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;388&quot; data-start=&quot;353&quot;&gt;Windows 서비스로 설치해서 항상 백그라운드에서 동작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;429&quot; data-start=&quot;389&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;398&quot; data-start=&quot;389&quot;&gt;포트 기본값&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;429&quot; data-start=&quot;398&quot;&gt;9182번 포트로 HTTP 서버 오픈 (메트릭 제공)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;wmi_exporter 와 windows_exporter 차이점&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;944&quot; data-start=&quot;131&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;wmi_exporter (구버전)&lt;/td&gt;
&lt;td&gt;windows_exporter (최신버전)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;251&quot; data-start=&quot;202&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;210&quot; data-start=&quot;202&quot;&gt;개발 시기&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;226&quot; data-start=&quot;210&quot;&gt;2018년까지 주로 사용&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;251&quot; data-start=&quot;226&quot;&gt;2019년부터 이름 변경, 유지보수 중&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;292&quot; data-start=&quot;252&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;257&quot; data-start=&quot;252&quot;&gt;이름&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;272&quot; data-start=&quot;257&quot;&gt;wmi_exporter&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;292&quot; data-start=&quot;272&quot;&gt;windows_exporter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;390&quot; data-start=&quot;293&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;301&quot; data-start=&quot;293&quot;&gt;수집 방식&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;352&quot; data-start=&quot;301&quot;&gt;WMI(Windows Management Instrumentation) 쿼리 직접 사용&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;390&quot; data-start=&quot;352&quot;&gt;성능 카운터(Perfmon API) 위주 사용, WMI 최소화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;493&quot; data-start=&quot;391&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;407&quot; data-start=&quot;391&quot;&gt;기본 설치시 활성 콜렉터&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;453&quot; data-start=&quot;407&quot;&gt;많음 (cpu, memory, disk, service, IIS 등 거의 다)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;493&quot; data-start=&quot;453&quot;&gt;적음 (cpu, memory, disk, system 등 기본만)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;515&quot; data-start=&quot;494&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;504&quot; data-start=&quot;494&quot;&gt;WMI 의존성&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;509&quot; data-start=&quot;504&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;515&quot; data-start=&quot;509&quot;&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;590&quot; data-start=&quot;516&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;543&quot; data-start=&quot;516&quot;&gt;서비스 상태 (ex: W3SVC) 직접 수집&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;569&quot; data-start=&quot;543&quot;&gt;가능 (wmi_service_status)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;590&quot; data-start=&quot;569&quot;&gt;불가능 (기본 콜렉터에는 없음)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;660&quot; data-start=&quot;591&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;603&quot; data-start=&quot;591&quot;&gt;IIS 상태 수집&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;625&quot; data-start=&quot;603&quot;&gt;사이트 활성화 여부 직접 수집 가능&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;660&quot; data-start=&quot;625&quot;&gt;트래픽/요청 수만 수집 가능 (활성화 여부는 간접 추정)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;721&quot; data-start=&quot;661&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;669&quot; data-start=&quot;661&quot;&gt;성능 부하&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;697&quot; data-start=&quot;669&quot;&gt;약간 높음 (특히 서비스 상태 조회 많을 때)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;721&quot; data-start=&quot;697&quot;&gt;매우 낮음 (Go 언어, 경량 설계)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;790&quot; data-start=&quot;722&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;731&quot; data-start=&quot;722&quot;&gt;설치 복잡도&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;762&quot; data-start=&quot;731&quot;&gt;collector 조정 필요 (안 하면 과다 수집)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;790&quot; data-start=&quot;762&quot;&gt;비교적 단순 (기본 collector 중심)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;850&quot; data-start=&quot;791&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;801&quot; data-start=&quot;791&quot;&gt;유지보수 상태&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;829&quot; data-start=&quot;801&quot;&gt;더 이상 업데이트 없음 (deprecated)&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;850&quot; data-start=&quot;829&quot;&gt;현재 유지보수/업데이트 진행 중&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;944&quot; data-start=&quot;851&quot;&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;862&quot; data-start=&quot;851&quot;&gt;추천 사용 용도&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;903&quot; data-start=&quot;862&quot;&gt;서비스 상태, IIS 살아있음/죽음 같은 세밀한 상태 확인 필요할 때&lt;/td&gt;
&lt;td style=&quot;text-align: left;&quot; data-end=&quot;944&quot; data-start=&quot;903&quot;&gt;서버 리소스 모니터링(일반적인 CPU, 메모리, 디스크) 중심일 때&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Monitoring/Prometheus</category>
      <author>박쿠리</author>
      <guid isPermaLink="true">https://cool-ri.tistory.com/74</guid>
      <comments>https://cool-ri.tistory.com/74#entry74comment</comments>
      <pubDate>Mon, 28 Apr 2025 20:27:31 +0900</pubDate>
    </item>
  </channel>
</rss>