ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Shell Script
    TT 2024. 6. 7. 22:08

    ssh를 통해 어떤 스토리지의 Alert를 조회하는 명령어(showalert)를 전달하여 Severity가 “informational” 등급이 아닌 Alert가 있을 때 모니터링 툴로 Event를 전달. 스크립트를 수행하는 서버의 SSH Public Key를 스토리지에 전달하여야 함

     

    VMware에서 제공하는 powerCLI Powershell 모듈을 이용하여 VMware 내 발생한 Alarm을 조회하고 신규 Alarm이 발생하였을 때 모니터링 툴로 이벤트를 발생시키는 powershell

    [조건]

    • vmware powerCLI 모듈을 사용할 때 필요한 사전 필요사항은 모두 적용됨
    • powershell profile 변경은 하지 않았으며 최초 수행 시 LastAlertDate.txt 파일은 존재하지 않음
    • 해당 스크립트는 작업 스케쥴러에 등록하여 사용함
    • 최초 1회 수행시에는 마지막 Alarm 정보가 저장된 파일만 만들고 exit0 로 스크립트를 종료한다
    • powershell profile 을 수정하지 않으면 모듈 import 의 효과는 세션에 한정된다
    • Array 타입에서 Count와 Length 어떤 것을 사용해도 Array에 저장된 변수 개수를 조회할 수 있다
    • 21라인의 B 부분에 -1을 넣어서 마지막으로 발생한 Alarm을 조회할 수 있다
    • 반복문 수행을 위해서는 ForEach-Object를 사용해야 함

    스크립트를 실제로 수행해 보니 에러없이 수행되었으나 로그 파일의 이름이 [HOSTNAME]_[수집일자].txt 형식으로 생성되지 않고, [수집일자].txt 형식으로 생성됨.

    1. 이유 : 기존 정의된 변수를 사용할 때($HOSTNAME_$DATETODAY) shell이 HOSTNAME_ 까지 변수명으로 인식했기 때문
    2. 개선안 : HOSTNAME까지만 변수명으로 인식하기 위해 중괄호를 사용하여 ${HOSTNAME}_${DATETODAY} 와 같이 변수를 사용하여야 한다

    다음의 장애 상황과 관련 script 내용을 확인하고 1)장애 원인 2) 재발 방지를 위한 수정사항

    [장애상황]

    • /app/logs에 불필요한 어플리케이션 로그가 많아 운영자가 “rm -rf /app/logs”로 디렉토리 전체를 삭제함
    • 다음날 아침, app1 유저 홈 디렉토리에 있던 중요한 파일 상당수가 삭제된 것을 발견
    • 매일 새벽 3시 app1 유저 crontab에서 수행되는 “/app/script/rm_log.sh”이 그 원인인 것으로 의심됨

    [/app/script/rm_log.sh]

    1. 장애원인 : /app/logs 디렉토리가 삭제되었기 때문에 cd/app/logs 명령은 실패하고 find . 이 app1 유저 홈 디렉토리에서 수행되면서 이 디렉토리 아래에 있는 30일 이상된 파일이 모두 삭제됨
    2. 수정 사항 : find 명령의 파일 삭제 경로를 . 이 아닌 절대경로로 수정한다

    운영중인 리눅스 서버를 대상으로 메모리 증설을 위한 실 사용량을 확인 중이다. 이를 위해 리눅스 서버의 free 명령어를 활용하여 1시간 간격으로 1개월 간의 장시간 메모리 사용량을 측정하고자 한다. 해당 리눅스 서버의 실제 메모리 여유량

    • 해당 리눅스 서버의 실제 메모리 여유량 : 14GB (메모리 부족 시에 버퍼/캐쉬의 공간도 사용할 수 있으므로 실제 여유량은 14GB)

    aws 기반에서 생성된 각 서버들에 대하여 인스턴스 및 os 이슈에 대한 self healing을 적용하기 위하여 알람 생성 작업을 수행

    • a : reboot , b : recover (각 ec2에 대한 self-healing 생성 스크립트)

    GCP 서비스 VM에 대한 백업정책

    가 : days_in_cycle = 1

    나 : start_time= “11:00”

    다: max_retention_days = 10

    • 매일 KST 20 시 스냅샷 백업이므로 1일 백업 사이클은 “1”이며, 시작 시간은 utc 기준으로 설정해야 함
    • ec2 instance 생성 시 “user-data.sh”를 통해서 “gitlab-ee”를 설치하고 있고 ec2 종료(terminate) 방지 기능이 활성화되어 있다
    • 모든 자원에는 “environment= “dev” tag가 생성된다
    • encryption_by_default 리소스를 있어 암호화되어 생성된다

    linux 서버에서 set 명령어

    • 설정 목적 : 고위험 명령어인 reboot을 실수로 발행하였을 때 확인 절차를 추가(Human Error 방지 차원이라는 의미면 정답)
    • 동작 원리 : Linux Shell 에서는 내장 명령어나 실제 프로그램보다 function이 우선 순위를 가지므로 reboot 명령 발행 시, 실제 reboot 명령어가 아닌 reboot function이 수행된다

    Linux Shell 명령 실행 방식

    $ type rm              //root cron의 $PATH에 /usr/bin이 포함되어 있어 절대경로 없이도 rm 명령 사용 할 수 있다
    rm is /usr/bin/rm
    $ alias rm="rm -i"     //type 명령어 결과를 보면 rm은 파일시스템 내 파일로 이루어진 명령어$ type rm
    rm is aliased to 'rm -i'$ function rm {
    > echo ""
    > echo "Your current host is       : $(hostname)"
    > echo "Your current directory is  : $PWD"
    > echo "Your are about to do the following: /usr/bin/rm $@"
    > echo "Are you sure (enter HOSTNAME to proceed)?"
    > read sure
    > if [ $sure = "$(uname -n)" ] ; then
    >    /usr/bin/rm "$@"
    > else
    >    echo Cancelled.
    > fi
    > }$ type rm
    rm is aliased to 'rm -i'$ touch aa
    $ rm aa              //rm aa는 alias의 rm이 실행, /usr/bin/rm은 파일시스템 명령어가 실행
    $ ./test script.sh   //export -f 를 사용하지 않은 경우 function은 ./test scrhipt.sh와 같이 실행한 스크립트에 적용되지 않음

    'TT' 카테고리의 다른 글

    개념정리  (0) 2024.06.08
    MSA Outer Architecture 구성요소  (0) 2024.06.06
    미들웨어 기초  (0) 2024.06.05
    DISK 파티션 구조_GPT/MBR  (0) 2024.06.01
    MSA_API Gateway_Rage Limit  (0) 2024.06.01

    댓글

Designed by Tistory.