Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
minLevel1
maxLevel7

사전 점검

Required Hardware Spec.

Info

Single Server Node 기준

아래는 InfluxDB의 official 권고 사양을 참고한 normal workload(agent 당 하나의 어플리케이션을 모니터링)에 대한 기준 입니다.
또한, CH Portal + InfluxDB + Kapacitor + SaltStack Server가 한 대의 서버에 탑재되는 것으로 산정합니다.
단, 각 서버 및 에이전트 컴포넌트들(https://seversky.atlassian.net/wiki/spaces/CSHD/pages/219414598/Introduction#Components-Architecture)의 workload량 따라 가변적 입니다.

  • 100 ~ 250 agent nodes: 8core, 16GB Ram

  • ~ 500 agent nodes: 16core, 32GB Ram

  • ~ 1000 agent nodes: 24core+, 48GB+ Ram

또한, Kapacitor(data processing component)의 경우는 job할당 개수나 프로세싱 부하에 따라 전체 workload는 차이가 클 수 있습니다.

운영 중 실제 부하량에 따라 각 컴포넌트를 분리-확장(Scale-out)하는 방법으로 권고 합니다.

OS

  • CentOS 7 x86_64 기준

CloudHub에서 사용되는 Port 및 방화벽 설정

개념도

Status
colourPurple
title참고
아래에서 화살표를 받는 쪽Port Listening 상태로 표기함.

...

External Ports: Internet 구간

  • 443: CloudHub Portal에서 사용하는 웹 포트.

Internal Ports (Backend Server 간): Trusted Network 구간

  • 8000 : Salt-API Server - CH Server와 데이터 송수신.

  • 9094 : Kapacitor - InfluxDB와 데이터 송수신.

Intermediate Ports (Agent ↔︎ Backend Server 간): Semi-Trusted Network 구간

Warning

아래 포트들은 모니터링 대상 호스트들(MO: Managed Objects)과의 통신에 사용됩니다.
443 포트를 제외하고는 보안 위협이 될 수 있으므로,
Source IP 혹은 대역으로 ACL정책을 사용할 필요가 있습니다.

아래 설정 예시와 같이 firewalld filter를 사용하거나, 혹은 tcp_wrappers 등을 사용하여 hosts.allow, hosts.deny 등에 ACL을 설정할 수 있습니다.
(tcp_wrappers 설정 방법은 여기서는 다루지 않습니다. 필요한 경우, 인터넷 검색을 통하여 쉽게 사용법을 얻을 수 있으니 참고 바랍니다.)

  • 4505-4506 : Salt-Master - Salt-Minion과 데이터 송수신.

  • 8086 : InfluxDB - telegraf로부터 데이터 수신.

아래는 firewalld 설정 파일 예시이며,

Status
colourRed
title주의
물리적인 보안 장비를 따로 사용하여 설정할 경우는 위 설명한 용도와 내용에 맞게 ACL을 설정하여 사용하여야 합니다.

...

languagexml

...

Table of Contents
minLevel1
maxLevel7

사전 점검

Required Hardware Spec.

Info

Single Server Node 기준

아래는 InfluxDB의 official 권고 사양을 참고한 normal workload(agent 당 하나의 어플리케이션을 모니터링)에 대한 기준 입니다.
또한, CH Portal + InfluxDB + Kapacitor + SaltStack Server가 한 대의 서버에 탑재되는 것으로 산정합니다.
단, 각 서버 및 에이전트 컴포넌트들(https://seversky.atlassian.net/wiki/spaces/CSHD/pages/219414598/Introduction#Components-Architecture)의 workload량 따라 가변적 입니다.

  • 100 ~ 250 agent nodes: 8core, 16GB Ram

  • ~ 500 agent nodes: 16core, 32GB Ram

  • ~ 1000 agent nodes: 24core+, 48GB+ Ram

또한, Kapacitor(data processing component)의 경우는 job할당 개수나 프로세싱 부하에 따라 전체 workload는 차이가 클 수 있습니다.

운영 중 실제 부하량에 따라 각 컴포넌트를 분리-확장(Scale-out)하는 방법으로 권고 합니다.

OS

  • CentOS 7 x86_64 기준

CloudHub에서 사용되는 Port 및 방화벽 설정

개념도

Status
colourPurple
title참고
아래에서 화살표를 받는 쪽Port Listening 상태로 표기함.

...

External Ports: Internet 구간

  • 443: CloudHub Portal에서 사용하는 웹 포트.

Internal Ports (Backend Server 간): Trusted Network 구간

  • 8000 : Salt-API Server - CH Server와 데이터 송수신.

  • 9094 : Kapacitor - InfluxDB와 데이터 송수신.

Intermediate Ports (Agent ↔︎ Backend Server 간): Semi-Trusted Network 구간

Warning

아래 포트들은 모니터링 대상 호스트들(MO: Managed Objects)과의 통신에 사용됩니다.
443 포트를 제외하고는 보안 위협이 될 수 있으므로,
Source IP 혹은 대역으로 ACL정책을 사용할 필요가 있습니다.

아래 설정 예시와 같이 firewalld filter를 사용하거나, 혹은 tcp_wrappers 등을 사용하여 hosts.allow, hosts.deny 등에 ACL을 설정할 수 있습니다.
(tcp_wrappers 설정 방법은 여기서는 다루지 않습니다. 필요한 경우, 인터넷 검색을 통하여 쉽게 사용법을 얻을 수 있으니 참고 바랍니다.)

  • 4505-4506 : Salt-Master - Salt-Minion과 데이터 송수신.

  • 8086 : InfluxDB - telegraf로부터 데이터 수신.

아래는 firewalld 설정 파일 예시이며,

Status
colourRed
title주의
물리적인 보안 장비를 따로 사용하여 설정할 경우는 위 설명한 용도와 내용에 맞게 ACL을 설정하여 사용하여야 합니다.

Code Block
languagexml
<!-- /etc/firewalld/zones/public.xml -->
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <port protocol="tcp" port="443"/>
  <rule family="ipv4">
    <source address="xxx.xxx.xxx.xxx0/24"/>
    <port protocol="tcp" port="80864505-4506"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="xxx.xxx.xxx.xxx"/>
    <port protocol="tcp" port="90948000"/>
    <accept/>
  </rule>
</zone>

기 설치된 Docker 버전 확인 및 이전 버전 삭제

...

버전 : Docker version 18.09.4 이상

Code Block
languagebash
$ docker --version
Docker version 18.09.4, build d14af54266

버전이 낮으면 이전 버전을 삭제 후 설치

이전 버전 삭제

...

languagebash

...


  <rule family="ipv4">
    <source address="xxx.xxx.xxx.xxx"/>
    <port protocol="tcp" port="8086"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    

...

<source address="xxx.xxx.xxx.xxx"/>
    <port protocol="tcp" port="9094"/>
    <accept/>
  </rule>
</zone>

기 설치된 Docker 버전 확인 및 이전 버전 삭제

  • 버전 : Docker version 18.09.4 이상

    Code Block
    languagebash
    $ docker --version
    Docker version 18.09.4, build d14af54266
  • 버전이 낮으면 이전 버전을 삭제 후 설치

    • 이전 버전 삭제

      Code Block
      languagebash
      $ yum remove docker-client-latest \
                        docker-commonclient \
                        docker-client-latest \
                        docker-latest-logrotatecommon \
                        docker-logrotatelatest \
                        docker-engine

...

    • -latest-logrotate \
                        docker-logrotate \
                        docker-engine

의존성 설치

Docker 설치

  • 저장소 설정 및 추가

    Code Block
    languagebash
    $ yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    
    $ yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
  • Install Docker Engine - Community

    Code Block
    languagebash
    $ yum install docker-ce docker-ce-cli containerd.io

...

  • Log 설정 파일 : $ vim /etc/logrotate.d/docker-container

    Code Block
    languageyaml
    /var/lib/docker/containers/*/*.log {
        daily
        rotate 7
        missingok
        dateext
        compress
        copytruncate
        notifempty
    }

Docker 서비스 실행

...

Code Block
languagebash
$ cd sandbox
$ ./sandbox up

$ docker-compose ps
/usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.24.3) or chardet (2.2.1) doesn't match a supported version!
  RequestsDependencyWarning)
       Name                    Command            State                                                  Ports
--------------------------------------------------------------------------------------------------------------------------------------------------------------
sandbox_influxdb_1    /entrypoint.sh influxd      Up      0.0.0.0:8082->8082/tcp,:::8082->8082/tcp, 0.0.0.0:8086->8086/tcp,:::8086->8086/tcp,
                                                          0.0.0.0:8089->8089/udp,:::8089->8089/udp
sandbox_kapacitor_1   /entrypoint.sh kapacitord   Up      0.0.0.0:9094->9092/tcp,:::9094->9092/tcp

SaltStack 설치([On/Off]line 설치 겸용)

Predefinitions

설명의 편의를 위해, 아래와 같이 사전 정의된 경로를 사용하는 것을 전제로 합니다.

...

Conda Installed Path

...

/opt/miniconda3

Conda 설치

Attachments
patterns*.sh

...

Sandbox 서비스 파일 생성 및 활성화

Info

install 명령어를 실행할 때 Working Directory로 지정하는 인자는 docker-compose 명령어가 실행되는 작업 디렉토리를 의미합니다. 따라서, 이 디렉토리 안에는 docker-compose.yml 파일이 있어야 합니다.

Code Block
$ cd <Sandbox 다운로드 받은 디렉토리>
$ ./sandbox install <Working Directory>

# 서비스 파일 확인
$ cat /etc/systemd/system/snet-sandbox.service

# 서비스 Enabled 상태 확인
$ systemctl status snet-sandbox

SaltStack 설치([On/Off]line 설치 겸용)

Predefinitions

설명의 편의를 위해, 아래와 같이 사전 정의된 경로를 사용하는 것을 전제로 합니다.

Conda Installed Path

/opt/miniconda3

Conda 설치

Attachments
patterns*.sh

위 첨부 파일에서 Miniconda3 배포 파일 다운로드 후,

Info

다운로드 된 파일로 Offline Install 가능함.

Linux의 경우 “Miniconda3-latest-Linux-x86_64.sh”을 다운로드 하는데,
이것은 내부에 쉡 스크립트 및 필요한 바이너리까지 포함된 파일임.

...

Note
  1. Host에 여러 Interface가 있을 경우 Salt-Minion과 연결 가능한 네트워크 Interface IP로 설정해야 합니다.
    ex) interface: 61.254.65.58
    아래 예와 같이 any(0.0.0.0)로 설정해도 master ↔︎ minion 간 통신은 문제가 없으나,
    CloudHub UI에서 원하지 않는 IP로 표시될 수 있습니다.

  2. 자동 생성될 부산물 파일들을, 가상 환경 내로 격리하기 위해 root_dir명시해야 합니다.

  3. 아래 설정 파일에는 주석 포함하여 영문 외 2 Byte 문자(예, 한글, 일본어, 중국어 등)가 포함되지 않도록 주의합니다.

Code Block
languageyaml
## log_level ##
# One of 'garbage', 'trace', 'debug', info', 'warning'(default), 'error', 'critical'.
log_level: info
root_dir: /opt/miniconda3/envs/saltenv/master

##### Primary configuration settings #####
##########################################
# The address of the interface to bind to:
interface: x.x.x.x
 
# The tcp port used by the publisher:
publish_port: 4505
 
# Allow minions to push files to the master. This is disabled by default, for
# security purposes.
# file_recv: True
 
#####      State System settings     #####
##########################################
# The state system uses a "top" file to tell the minions what environment to
# use and what modules to use. The state_top file is defined relative to the
# root of the base environment as defined in "File Server settings" below.
state_top: top.sls
 
#####      File Server settings      #####
##########################################
# Salt runs a lightweight file server written in zeromq to deliver files to
# minions. This file server is built into the master daemon and does not
# require a dedicated port.
 
# The file server works on environments passed to the master, each environment
# can have multiple root directories, the subdirectories in the multiple file
# roots cannot match, otherwise the downloaded files will not be able to be
# reliably ensured. A base environment is required to house the top file.
file_roots:
  base:
    - /srv/salt/prod
 
# File Server Backend
#
# Salt supports a modular fileserver backend system, this system allows
# the salt master to link directly to third party systems to gather and
# manage the files available to minions. Multiple backends can be
# configured and will be searched for the requested file in the order in which
# they are defined here. The default setting only enables the standard backend
# "roots" which uses the "file_roots" option.
fileserver_backend:
  - roots
 
#####        Security settings       #####
##########################################
# The external auth system uses the Salt auth modules to authenticate and
# validate users to access areas of the Salt system.
external_auth:
  pam:
    saltdevsaltenv:
      - .*
      - '@runner'
      - '@wheel'
      - '@jobs'
 
# Allow eauth users to specify the expiry time of the tokens they generate.
# A boolean applies to all users or a dictionary of whitelisted eauth backends
# and usernames may be given.
token_expire_user_override:
  pam:
    - saltdev

#####        API Server settings     #####
##########################################
rest_cherrypy:
  port: 8887
  ssl_crt: /usr/lib/cloudhub/key/cloudhub_self_signed.crt
  ssl_key: /usr/lib/cloudhub/key/cloudhub_self_signed.key

rest_cherrypy_ssl: True

...

 given.
token_expire_user_override:
  pam:
    - saltenv

#####        API Server settings     #####
##########################################
rest_cherrypy:
  port: 8887
  ssl_crt: /usr/lib/cloudhub/key/cloudhub_self_signed.crt
  ssl_key: /usr/lib/cloudhub/key/cloudhub_self_signed.key

rest_cherrypy_ssl: True

Salt-Minion 설정

Info

Collector Server 설정

Minion ID를 "ch-collector"로 시작하도록 설정하면 Collector Server로 사용할 수 있으며, 이는 다음과 같이 활용됩니다:

  1. 분산 처리를 위한 OpenStack 데이터 수집용 Telegraf 설정 파일을 생성하거나 수정할 Target Minion으로 지정할 수 있습니다.
    (CloudHub 1.4.4 버전이상 적용)

  2. VMware의 SaltStack Rest API를 호출할 Target Minion으로 사용할 수 있습니다.
    (CloudHub 1.4.0 버전이상 적용)

https://seversky.atlassian.net/wiki/spaces/CSHD/pages/1386020930/VMware+Monitoring#vCenter-%EC%B6%94%EA%B0%80

  1. Kubernetes의 SaltStack Rest API를 호출할 Target Minion으로 사용할 수 있습니다.
    (CloudHub 1.4.0 버전 이상 적용)

https://seversky.atlassian.net/wiki/spaces/CSHD/pages/1879834625/Kubernetes+Monitoring#Kubernetes-%EC%A1%B0%ED%9A%8C

  1. IPMI의 SaltStack Rest API를 호출할 Target Minion으로 사용할 수 있습니다.
    (CloudHub 1.4.0 버전 이상 적용)
    https://seversky.atlassian.net/wiki/spaces/CSHD/pages/1324679217/Inventory+Topology+Manual#IPMI(Intelligent-Platform-Management-Interface)

Warning

/opt/miniconda3/minion/etc/salt/minion.d/minion.conf와 같은 형식으로 사용 금지.

이 경우, salt-minion을 실행할 경우, /opt/miniconda3/minion/etc/salt/minion.d가 아닌, /minion/etc/salt/minion.d에 _schedule.conf가 생성됩니다.

Note
  1. 자동 생성될 부산물 파일들을, 가상 환경 내로 격리하기 위해 root_dir명시해야 합니다.

  2. 아래 설정 파일에는 주석 포함하여 영문 외 2 Byte 문자(예, 한글, 일본어, 중국어 등)가 포함되지 않도록 주의합니다.

Config path:

Code Block
$ mkdir -p /opt/miniconda3/envs/saltenv/minion/etc/salt && vim /opt/miniconda3/envs/saltenv/minion/etc/salt/minion
Code Block
languageyaml
## log_level ##
# One of 'garbage', 'trace', 'debug', info', 'warning'(default), 'error', 'critical'.
log_level: info
root_dir: /opt/miniconda3/envs/saltenv/minion
master: <master ip address>
id: <유일한 minion id 설정해야 하며, 생략 시, hostname = minion id>

계정 생성 및 패스워드 설정

Note

아래 추가된 saltdevsaltenv에 대한 password는 추후 salt-api authentication을 위한 pam_token를 발급 받는데 쓰이므로, 잘 기억해두어야 합니다.

Code Block
languagebash
$ useradd saltdevsaltenv
$ passwd <password>saltenv
Changing password for user saltdevsaltenv.
New password:

Register & Start Salt Services

...

Status
colourRed
title주의
https://seversky.atlassian.net/wiki/spaces/CSHD/pages/248676461/Looking+around#InfluxDB 의 “Retention Policy Duration” 지침을 반드시 따라야 합니다.