728x90
반응형

1. DBeaver 사이트로 접속하여 Tool 다운로드

https://dbeaver.io/download/

 

2. PostgreSQL 사이트에서 JDBC 다운로드

https://jdbc.postgresql.org/download.html

3. DBeaver 접속하여 요구하는 Driver 확인

데이터베이스 -> 드라이버 관리자로 들어간다.

 

PostgreSQL 선택 후 Edit 눌러준다.

 

Libraries 탭에서 요구하는 드라이버를 확인한다.

 

 

4. 메이븐 레포에서 관련 드라이버를 다운로드 한다.

아래 클릭 하여 이동한다. ↓

728x90

 

https://mvnrepository.com/artifact/net.postgis

DBeaver에서 요구하는 드라이버 버전을 찾아서 다운로드 한다.

 

5. DBeaver에서 다운로드한 Jar 파일을 등록 해준다.

아까 요구 라이브러리를 확인 했던 창에서 'Classpath'를 클릭한다.

Global libraries에 다운로들한 jar파일을 모두 등록한다.

그런 다음 Find Class를 눌러줬었나? 암튼 해본다.

위와 같이 파란색으로 색이 변경 되었으면 완료다.

728x90
300x250
728x90
반응형

개요

LDAP을 사용 중인 사용자들에게 

보안정책에 따라 패스워드 만료일이 다가오거나 만료가 되었을 때

메일로 알려주는 역할을 한다.

메일 문구는 예씨로 작성 하였다. 자유롭게 변경 가능하다.

MY_LDAP_HOSTURI="ldapi:///"
MY_LDAP_DEFAULTPWDPOLICYDN="cn=default,ou=Policies,cn=manager,dc=test,dc=com"
MY_LDAP_EXCLUDEPWDPOLICYDN="cn=e,cn=default,ou=Policies,cn=manager,dc=test,dc=com"
MY_LDAP_SEARCHBASE="ou=People,dc=test,dc=com"
MY_LDAP_SEARCHFILTER="(&(uid=*)(objectClass=inetOrgPerson))"
MY_LDAP_SEARCHSCOPE="one"
MY_LDAP_SEARCHBIN="/usr/bin/ldapsearch"
#MY_MAIL_DELAY=10
MY_LDAP_NAME_ATTR=cn
MY_LDAP_LOGIN_ATTR=uid
MY_LDAP_MAIL_ATTR=mail
export LC_ALL=ko_KR.UTF-8
MY_MAIL_BODY="
        안녕하세요 %name 님,\n\n \

        귀하의 비밀번호 변경이 필요합니다. \n\n \

        해당 비밀번호는 정보보호 정책에 의해 %expireTimeTZ, %expireDays 일 후 만료 됩니다. \n\n \

        아래 해당 정책에 준수하여 변경 부탁드립니다.:\n\n \

        \t\t - 영문 대소문자/숫자/특수문자 중 3가지 이상 조합, 최소 8자리 이상 \n\n \
        \t\t - 비밀번호 변경 페이지  \n \
        \t\t    http://ssp.ldap.test.com/ \n\n \
        \t\t - 비밀번호 변경 후 공용폴더 사용자들은 Windows 자격증명 변경이 필요합니다. \n\n \
        \t\t - 아래 매뉴얼을 확인 하시어 Windows 자격증명을 변경 하세요.
        \t\t    

        추가로 문의사항은 Infra Part에 문의 바랍니다. \n\n \

        감사합니다."
EX_MAIL_BODY="
        안녕하세요 %name 님,\n\n \

        %name 님의 비밀번호가 %expireTimeTZ 부로 만료 되었습니다. \n\n \

        아래 주소로 접속하셔서 '패스워드 초기화' 를 진행하시기 바랍니다. \n\n \

        \t\t - 비밀번호 초기화 페이지 \n \
        \t\t    http://ssp.ldap.test.com/index.php?action=sendtoken \n\n \
        \t\t - 그룹웨어 메일 확인 필수 \n\n \
        \t\t - 비밀번호 초기화 후 공용폴더 사용자들은 Windows 자격증명 변경이 필요합니다. \n\n \
        \t\t - 아래 매뉴얼을 확인 하시어 Windows 자격증명을 변경 하세요.
        \t\t   

        추가 문의사항 있을 시 Infra Part에 문의 바랍니다. \n\n \

        감사합니다."
MY_MAIL_SUBJECT="[회사] 비밀번호 상태 안내 메일 입니다."
MY_MAIL_BIN="mail"
#MY_LOG_HEADER="`date +\"%b %e,%Y %T\"`"
MY_LOG_HEADER="`TZ='Asia/Seoul' date +\"%Y년 %B %d일 %A %T\"`"
MY_GAWK_BIN="/usr/bin/gawk"
getTimeInSeconds() {
        date=0
        os=`uname -s`
        if [ "$1" ]; then
                #date=`${MY_GAWK_BIN} 'BEGIN  { \
                date=`TZ=UTC ${MY_GAWK_BIN} 'BEGIN  { \
                        if (ARGC == 2) { \
                                print mktime(ARGV[1]) \
                        } \
                        exit 0 }' "$1"`
        else
                if [ "${os}" = "SunOS" ]; then
                        date=`/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= \
                                '/^time\(\)/ {gsub(/ /,"",$2);print $2}'`
                else
                        now=`date +"%Y %m %d %H %M %S" -u`
                        #now=`date +"%Y %m %d %H %M %S"`
                        date=`getTimeInSeconds "$now"`
                fi
        fi
        echo ${date}
}
tmp_dir="/tmp/$$.checkldap.tmp"
result_file="${tmp_dir}/res.tmp.1"
buffer_file="${tmp_dir}/buf.tmp.1"
tmp_dir_stats="/tmp/ldap-password-stats"
ldap_param="-Y EXTERNAL -H ${MY_LDAP_HOSTURI} -LLL -Q"
nb_users=0
nb_expired_users=0
nb_warning_users=0
nb_exclude_users=0
if [ -d ${tmp_dir} ]; then
        echo "Error : temporary directory exists (${tmp_dir})"
        exit 1
fi
mkdir ${tmp_dir}
if [ ${MY_LDAP_ROOTDN} ]; then
        ldap_param="${ldap_param} -D ${MY_LDAP_ROOTDN} -w ${MY_LDAP_ROOTPW}"
fi
${MY_LDAP_SEARCHBIN} ${ldap_param} -s ${MY_LDAP_SEARCHSCOPE} \
        -b "${MY_LDAP_SEARCHBASE}" "${MY_LDAP_SEARCHFILTER}" \
        "dn" > ${result_file}
while read dnStr
do
        if [ ! "${dnStr}" ]; then
                continue
        fi
        dn=`echo ${dnStr} | cut -d : -f 2`
        nb_users=`expr ${nb_users} + 1`
        ${MY_LDAP_SEARCHBIN} ${ldap_param} -s base -b "${dn}" \
                ${MY_LDAP_NAME_ATTR} ${MY_LDAP_LOGIN_ATTR} ${MY_LDAP_MAIL_ATTR} pwdChangedTime pwdPolicySubentry \
                > ${buffer_file}
        login=`grep -w "${MY_LDAP_LOGIN_ATTR}:" ${buffer_file} | cut -d : -f 2 \
                | sed "s/^ *//;s/ *$//"`
        name=`grep -w "${MY_LDAP_NAME_ATTR}:" ${buffer_file} | cut -d : -f 2\
                | sed "s/^ *//;s/ *$//"`
        name2=`echo ${name}`
        mail=`grep -w "${MY_LDAP_MAIL_ATTR}:" ${buffer_file} | cut -d : -f 2 \
                | sed "s/^ *//;s/ *$//"`
        pwdChangedTime=`grep -w "pwdChangedTime:" ${buffer_file} \
                | cut -d : -f 2 | cut -c 1-15 | sed "s/^ *//;s/ *$//"`
        pwdPolicySubentry=`grep -w "pwdPolicySubentry:" ${buffer_file} \
                | cut -d : -f 2 | sed "s/^ *//;s/ *$//"`
        if [ ! "${pwdChangedTime}" ]; then
                echo "${login} (${mail}) 해당 계정은 패스워드 변경 날짜가 존재하지 않습니다." >> ${tmp_dir_stats}
                continue
        fi
        if [ ! "${pwdPolicySubentry}" -a ! "${MY_LDAP_DEFAULTPWDPOLICYDN}" ]; then
                echo "${login} (${mail}) 해당 계정은 패스워드 정책이 걸려있지 않습니다." >> ${tmp_dir_stats}
                continue
        fi
        if [ "${pwdPolicySubentry}" ]; then
                echo "${login} (${mail}) 해당 계정은 패스워드 정책 제외 대상 입니다." >> ${tmp_dir_stats}
                continue
        fi
        ldap_search="${MY_LDAP_SEARCHBIN} ${ldap_param} -s base"
        if [ "${pwdPolicySubentry}" ]; then
                ldap_search="${ldap_search} -b ${pwdPolicySubentry}"
        else
                ldap_search="${ldap_search} -b ${MY_LDAP_DEFAULTPWDPOLICYDN}"
        fi
        ldap_search="$ldap_search pwdMaxAge pwdExpireWarning pwdMinLength pwdInHistory"
        pwdMaxAge=`${ldap_search} | grep -w "pwdMaxAge:" | cut -d : -f 2 \
                | sed "s/^ *//;s/ *$//"`
        pwdExpireWarning=`${ldap_search} | grep -w "pwdExpireWarning:" | cut -d : -f 2 \
                | sed "s/^ *//;s/ *$//"`
        pwdMinLength=`${ldap_search} | grep -w "pwdMinLength:" | cut -d : -f 2 \
                | sed "s/^ *//;s/ *$//"`
        pwdInHistory=`${ldap_search} | grep -w "pwdInHistory:" | cut -d : -f 2 \
                | sed "s/^ *//;s/ *$//"`
        if [ ! "${pwdMaxAge}" ]; then
                echo "${login} (${mail}) 해당 계정은 만료 설정이 되어 있지 않습니다." >> ${tmp_dir_stats}
                continue
        fi
        MY_MAIL_DELAY=${MY_MAIL_DELAY:=$pwdExpireWarning}
        if [ "${pwdChangedTime}" ]; then
                s=`echo ${pwdChangedTime} | cut -c 13-14`
                m=`echo ${pwdChangedTime} | cut -c 11-12`
                h=`echo ${pwdChangedTime} | cut -c 9-10`
                d=`echo ${pwdChangedTime} | cut -c 7-8`
                M=`echo ${pwdChangedTime} | cut -c 5-6`
                y=`echo ${pwdChangedTime} | cut -c 1-4`
                currentTime=`getTimeInSeconds`
                pwdChangedTime=`getTimeInSeconds "$y $M $d $h $m $s"`
                diffTime=`expr ${currentTime} - ${pwdChangedTime}`
        fi
        expireTime=`expr ${pwdChangedTime} + ${pwdMaxAge}`
        expireWarningTime=`expr ${pwdChangedTime} + ${MY_MAIL_DELAY}`
        if [ ${currentTime} -gt ${expireTime} ]; then
                nb_expired_users=`expr ${nb_expired_users} + 1`
                expireTime=`date -d @$expireTime "+%Y년 %B %d일 %A %T"`
                logmsg="${EX_MAIL_BODY}"
                logmsg=`echo -e ${logmsg} | sed "s/%name/${name}/; \
                        s/%login/${login}/; s/%expireTimeTZ/${expireTime}/; s/%pwdMinLength/${pwdMinLength}/; s/%pwdInHistory/${pwdInHistory}/; \
                        s/%expireDays/${expireDays}/"`
                #echo "${logmsg}" | ${MY_MAIL_BIN} -S "from=Infra Part <ldap>" -s "${MY_MAIL_SUBJECT}" ${mail} >&2
                echo "${logmsg}" | ${MY_MAIL_BIN} -S "from=Infra Part <ldap>" -s "${MY_MAIL_SUBJECT}" test@test.co.kr >&2
                echo "${login} 해당 계정이 ${expireTime} 부로 패스워드 정책에 의해 만료 되었습니다. ${mail} 해당 메일로 안내 메일이 발송 되었습니다." >> ${tmp_dir_stats}
                continue
        fi
        expireTimeTZ=`date -d @$expireTime "+%Y년 %B %d일 %A %T"`
        expireTimeMail=`date -d @$expireTime "+%s"`
        now=`date +%s`
        expireDays=`echo $(( (${expireTimeMail} - ${now} )/(60*60*24) ))`
        if [ "${mail}" -a "${name}" \
                -a "${login}" -a "${diffTime}" -a "${pwdMaxAge}" ]
        then
                diffTime=`expr ${diffTime} + ${MY_MAIL_DELAY}`
                #if [ ${diffTime} -gt ${pwdMaxAge} ]; then
                if [ ${currentTime} -gt ${expireWarningTime} -a ${currentTime} -lt ${expireTime} ]; then
                        logmsg="${MY_MAIL_BODY}"
                        logmsg=`echo -e ${logmsg} | sed "s/%name/${name}/; \
                                s/%login/${login}/; s/%expireTimeTZ/${expireTimeTZ}/; s/%pwdMinLength/${pwdMinLength}/; s/%pwdInHistory/${pwdInHistory}/; \
                                s/%expireDays/${expireDays}/"`
                        #echo "${logmsg}" | ${MY_MAIL_BIN} -S "from=Infra Part <ldap>" -s "${MY_MAIL_SUBJECT}" ${mail} >&2
                        echo "${logmsg}" | ${MY_MAIL_BIN} -S "from=Infra Part <ldap>" -s "${MY_MAIL_SUBJECT}" test@test.co.kr >&2
                        echo "${login} 해당 계정의 만료 날짜가 다가옵니다. ${mail} 해당 메일로 안내 발송 되었습니다. (만료 날짜, ${expireTimeTZ})." >> ${tmp_dir_stats}
                        nb_warning_users=`expr ${nb_warning_users} + 1`
                fi
        fi
done < ${result_file}
sed -i "1i관리자님,\n${MY_LOG_HEADER} 기준, 임직원 패스워드 상태 리스트 입니다.\n" ${tmp_dir_stats}
echo "Total 체크된 사용자: ${nb_users}" >> ${tmp_dir_stats}
echo "비밀번호 만료된 사용자: ${nb_expired_users}" >> ${tmp_dir_stats}
echo "비밀번호 만료 사전 안내된 사용자: ${nb_warning_users}" >> ${tmp_dir_stats}
sed -i -e '/^Total.*/i\\ ' -e '/^Total.*/i ===== 통계 =====' ${tmp_dir_stats}
#mail -S "from=Infra Part <ldap>" -s "[LDAP] 임직원 패스워드 만료 상태 리스트" infra_p@test.co.kr < ${tmp_dir_stats}
mail -S "from=Infra Part <ldap>" -s "[LDAP] 임직원 패스워드 만료 상태 리스트" t@test.co.kr < ${tmp_dir_stats}
rm -rf ${tmp_dir}
rm -rf ${tmp_dir_stats}
exit 0
728x90
300x250
728x90
반응형

개요

Openldap을 이용하여 패스워드 정책을 걸 수 있다.

패스워드 정책이란 패스워드 사용 기간이나 자릿수,특수문자,대소문자 등을 지정 할 수 있는 정책이다.

패스워드 정책에 대한 스키마는 기본적으로 설치가 되어 있으나 활성화를 해주어야 한다.

 


1. 패스워드 정책 스키마 파일이 존재하는지 확인

ls -ltr /etc/openldap/schema/ppolicy.ldif

2. 해당 정책 스키마를 추가

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

3. 패스워드 정책 모듈 활성화

- vi로 ldif 파일 생성한다.

vi ppolicy-module.ldif
dn: cn=module{0},cn=config
cn: module{0}
objectClass: olcModuleList
olcModuleLoad: ppolicy.la
olcModulePath: /usr/lib64/openldap

4. 생성한 모듈 LDIF를 추가

ldapadd -Y EXTERNAL -H ldapi:/// -f ppolicy-module.ldif

5. 실제 모듈이 추가 되었는지 확인

slapcat -n 0 | grep olcModuleLoad

6. 정책을 세팅 할 디렉토리를 만들어 줘야 한다. 

vi ppolicy-ou.ldif
dn: ou=Policies,cn=manager,dc=test,dc=com
ou: Policies
objectClass: organizationalUnit
objectClass: extensibleObject
objectClass: top

7. 정책 OU 추가

ldapadd -Y EXTERNAL -H ldapi:/// -f ppolicy-ou.ldif

8. 생성한 정책 OU 밑에 기본적으로 사용할 패스워드 정책을 정의

vi ppolicy-password.ldif
dn: cn=default,ou=Policies,cn=manager,dc=test,dc=com
objectClass: top
objectClass: device
objectClass: pwdPolicy
objectClass: pwdPolicyChecker
cn: default
pwdAttribute: userPassword
pwdCheckQuality: 0
pwdFailureCountInterval: 120
pwdLockout: TRUE
pwdLockoutDuration: 0
pwdAllowUserChange: TRUE
pwdGraceAuthNLimit: 0
pwdMustChange: TRUE
pwdSafeModify: TRUE
pwdMinAge: 0
pwdMinLength: 8
pwdMaxFailure: 5
pwdInHistory: 2
pwdExpireWarning: 7171200
pwdMaxAge: 7776000

9. 생성한 LDIF 파일을 기반으로 반영

ldapadd -x -D cn=manager,dc=test,dc=com -w 패스워드 -f ppolicy-password.ldif

10. 실제로 해당 값이 반영 된 것을 볼 수 있다.

이렇게 되면 기본적으로 User를 추가 하면 위 정책을 따라가게 되어 있다.

해당 패스워드 정책에서 의미하는 바를 살펴보자

# 0이면 비활성화, 값이 1이면 서버가 검사할 수 없는 경우(해싱되었던가) 승인, 
# 값이 2면 서버가 이를 확인 할수 없으면 거부하는 오류는 반환
pwdCheckQuality: 0

# 패스워드 변경 후 특정 시간동안 암호 변경 못하게 설정
# 0이면 비활성화
pwdMinAge: 0

# 수정된 암호의 만료되는 시간(초) 설정 값이 0이면 만료되지 않음
pwdMaxAge: 1800

# 패스워드 최소 글자
pwdMinLength: 7

# 예전 암호 저장
pwdInHistory: 3

# 패스워드 연속 실패 횟수
pwdMaxFailure: 3

# 패스워드 실패 후 재시도에 대한 대기 시간(초)
pwdFailureCountInterval: 0

# TRUE일 때 바인드 계정 인증 시 pwdMaxFailure를 따를 것인지?
pwdLockout: TRUE
728x90
# 바인드 시도 실패 횟수 초과로 재시도에 대한 대기 시간(초)
# 값이 0 이면 관리자가 재설정 할 때까지 암호를 사용 할 수 없음
pwdLockoutDuration: 0

# 자신이 암호를 변경 할 수 있는지 여부
pwdAllowUserChange: TRUE

# 암호 만료 경고메시지가 사용자에게 반환 되는 시간(초)
# pwdMaxAge 값보다 작아야함
pwdExpireWarning: 0

# 만료된 암호를 사용하여 인증 할 수 있는 횟수
# 값이 0 이면 로그인 안됨
pwdGraceAuthNLimit: 0

# 비밀번호 재설정 후 디렉토리에 처음 바인드할때 항목이 비밀번호를 변경해야 함이 TRUE
# FALSE면 사용자는 관리자가 암호를 설정하거나 재설정 후 바인딩 할 때 암호를 변경할 필요가 없음
pwdMustChange: TRUE

# 암호 변경 시 기존 암호와 새 암호를 함께 보내야 하는지 여부 결정
pwdSafeModify: TRUE

특정 User에게만 패스워드 정책 예외 시키기

개요

일부 시스템에서 사용하는 관리자 계정이나, 어디와 연동 되어 있는 특정 계정들에 대해서는

패스워드 만료를 시키고 싶지 않을 경우가 있을 것이다.

그럴경우 해당 설정으로 패스워드 정책으로부터 예외 처리 시키기 위함이다.

 

1. 패스워드 만료가 되지 않기 위한 Exclude 정책 생성

vi ppolicy-exclude.ldif
dn: cn=e,cn=default,ou=Policies,cn=manager,dc=test,dc=com
objectClass: top
objectClass: device
objectClass: pwdPolicy
objectClass: pwdPolicyChecker
cn: e
pwdAttribute: userPassword
pwdCheckQuality: 0
pwdMinAge: 0
pwdMinLength: 8
pwdInHistory: 5
pwdMaxFailure: 3
pwdFailureCountInterval: 0
pwdLockout: TRUE
pwdLockoutDuration: 0
pwdAllowUserChange: TRUE
pwdGraceAuthNLimit: 0
pwdMustChange: FALSE
pwdSafeModify: FALSE

2. 생성한 LDIF 적용하기

ldapadd -x -D cn=manager,dc=test,dc=com -w 패스워드 -f ppolicy-exclude.ldif

3. Exclude User 지정을 위한 LDIF 생성

vi excludePasswordPolicy.ldif
dn: uid=t1234,ou=People,dc=test,dc=com
changetype: modify
add: pwdPolicySubentry
pwdPolicySubentry: cn=e,cn=default,ou=Policies,cn=manager,dc=test,dc=com

4. LDIF 적용하기

/usr/bin/ldapmodify -x -D cn=manager,dc=test,dc=com -w 패스워드 -f excludePasswordPolicy.ldif

5. 패스워드 예외 적용 확인

ldapsearch -Y EXTERNAL -H ldapi:/// -s one -b "ou=People,dc=test,dc=com" -LLL -Q uid pwdPolicySubentry

dn: uid=t1234,ou=People,dc=test,dc=com
uid: t1234
pwdPolicySubentry: cn=e,cn=default,ou=Policies,cn=manager,dc=test,dc=com

이렇게 해서 패스워드 정책에서 예외처리를 할 수 있다.

예외처리 해 놓은 유저를 다시 default 정책으로 적용 시키려면 아래와 같이 진행하시오

vi deletePasswordPolicy.ldif
dn: uid=t1234,ou=People,dc=test,dc=com
changetype: modify
delete: pwdPolicySubentry
/usr/bin/ldapmodify -x -D cn=manager,dc=test,dc=com -w 패스워드 -f deletePasswordPolicy.ldif

 

728x90
300x250
728x90
반응형

개요

MySQL을 사용하다 보면 ibdata1이 용량이 커져 있을 때가 있다.

비단 Zabbix를 사용 할 뿐만 아니라, MySQL을 사용하면 발생 할 수 있는 문제이다.

ibdata1에 대해 용량을 정리 해줘야 하는데 명령어 하나로 간단하게 정리 할 수가 없다.

데이터베이스를 Dump 후 Drop 하고 다시 Import 해줘야 한다.


1. DB 접속

mysql -uroot -p

2. DB 확인

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| zabbix             |
+--------------------+

3. 해당 DB의 테이블 사용용량 확인

select table_name, (data_length + index_length)/1024/1024 as total_mb, table_rows from information_sc
hema.tables where table_schema = 'zabbix';
728x90
+----------------------------+--------------+------------+
| table_name                 | total_mb     | table_rows |
+----------------------------+--------------+------------+
| acknowledges               |   0.06250000 |          0 |
| actions                    |   0.04687500 |          8 |
| alerts                     |   0.17187500 |         45 |
| application_discovery      |   0.04687500 |         72 |
| application_prototype      |   0.07812500 |        351 |
| application_template       |   0.04687500 |        353 |
| applications               |   0.17187500 |       1529 |
| auditlog                   |   0.06250000 |          2 |
| auditlog_details           |   0.03125000 |          0 |
| autoreg_host               |   0.04687500 |          0 |
| conditions                 |   0.03125000 |         24 |
| config                     |   0.04687500 |          1 |
| config_autoreg_tls         |   0.03125000 |          1 |
| corr_condition             |   0.03125000 |          0 |
| corr_condition_group       |   0.03125000 |          0 |
| corr_condition_tag         |   0.01562500 |          0 |
| corr_condition_tagpair     |   0.01562500 |          0 |
| corr_condition_tagvalue    |   0.01562500 |          0 |
| corr_operation             |   0.03125000 |          0 |
| correlation                |   0.04687500 |          0 |
| dashboard                  |   0.03125000 |          2 |
| dashboard_user             |   0.04687500 |          0 |
| dashboard_usrgrp           |   0.04687500 |          1 |
| dbversion                  |   0.01562500 |          1 |
| dchecks                    |   0.03125000 |          1 |
| dhosts                     |   0.03125000 |          0 |
| drules                     |   0.04687500 |          1 |
| dservices                  |   0.04687500 |          0 |
| escalations                |   0.06250000 |          0 |
| event_recovery             |   0.04687500 |          6 |
| event_suppress             |   0.06250000 |          0 |
| event_tag                  |   0.03125000 |          0 |
| events                     |   0.04687500 |         23 |
| expressions                |   0.03125000 |         10 |
| functions                  |   0.87500000 |       6328 |
| globalmacro                |   0.03125000 |          5 |
| globalvars                 |   0.01562500 |          1 |
| graph_discovery            |   0.06250000 |        343 |
| graph_theme                |   0.03125000 |          4 |
| graphs                     |   0.68750000 |       1846 |
| graphs_items               |   0.71875000 |       3930 |
| group_discovery            |   0.03125000 |          0 |
| group_prototype            |   0.06250000 |         11 |
| history                    |  20.03125000 |     216292 |
| history_log                |   0.03125000 |          0 |
| history_str                |   1.03125000 |        427 |
| history_text               |   1.06250000 |        679 |
| history_uint               | 244.03125000 |    2100865 |
| host_discovery             |   0.04687500 |          4 |
| host_inventory             |   0.01562500 |          0 |
| host_tag                   |   0.03125000 |          0 |
| hostmacro                  |   0.42187500 |       2036 |
| hosts                      |   0.25000000 |        287 |
| hosts_groups               |   0.04687500 |        258 |
| hosts_templates            |   0.04687500 |        166 |
| housekeeper                |   0.01562500 |          0 |
| hstgrp                     |   0.03125000 |         26 |
| httpstep                   |   0.03125000 |          0 |
| httpstep_field             |   0.03125000 |          0 |
| httpstepitem               |   0.04687500 |          0 |
| httptest                   |   0.07812500 |          0 |
| httptest_field             |   0.03125000 |          0 |
| httptestitem               |   0.04687500 |          0 |
| icon_map                   |   0.04687500 |          0 |
| icon_mapping               |   0.04687500 |          0 |
| ids                        |   0.01562500 |         50 |
| images                     |   1.53125000 |        157 |
| interface                  |   0.04687500 |         15 |
| interface_discovery        |   0.03125000 |          0 |
| interface_snmp             |   0.01562500 |          8 |
| item_application_prototype |   0.35937500 |       2787 |
| item_condition             |   0.20312500 |       1329 |
| item_discovery             |   0.75000000 |       5365 |
| item_preproc               |   1.89062500 |       8038 |
| item_rtdata                |   0.15625000 |       2324 |
| items                      |   9.34375000 |      10853 |
| items_applications         |   1.07812500 |       7690 |
| lld_macro_path             |   0.03125000 |         91 |
| lld_override               |   0.03125000 |        112 |
| lld_override_condition     |   0.03125000 |        108 |
| lld_override_opdiscover    |   0.01562500 |        115 |
| lld_override_operation     |   0.03125000 |        115 |
| lld_override_ophistory     |   0.01562500 |          0 |
| lld_override_opinventory   |   0.01562500 |          0 |
| lld_override_opperiod      |   0.01562500 |          0 |
| lld_override_opseverity    |   0.01562500 |          0 |
| lld_override_opstatus      |   0.01562500 |        115 |
| lld_override_optag         |   0.03125000 |          0 |
| lld_override_optemplate    |   0.04687500 |          0 |
| lld_override_optrends      |   0.01562500 |          0 |
| maintenance_tag            |   0.03125000 |          0 |
| maintenances               |   0.04687500 |          0 |
| maintenances_groups        |   0.04687500 |          0 |
| maintenances_hosts         |   0.04687500 |          0 |
| maintenances_windows       |   0.04687500 |          0 |
| mappings                   |   0.21875000 |       1934 |
| media                      |   0.04687500 |          1 |
| media_type                 |   0.39062500 |         33 |
| media_type_message         |   0.09375000 |        135 |
| media_type_param           |   0.07812500 |        505 |
| module                     |   0.01562500 |          0 |
| opcommand                  |   0.03125000 |          0 |
| opcommand_grp              |   0.04687500 |          0 |
| opcommand_hst              |   0.04687500 |          0 |
| opconditions               |   0.03125000 |          0 |
| operations                 |   0.03125000 |         15 |
| opgroup                    |   0.04687500 |          0 |
| opinventory                |   0.01562500 |          0 |
| opmessage                  |   0.03125000 |         14 |
| opmessage_grp              |   0.04687500 |          7 |
| opmessage_usr              |   0.04687500 |          0 |
| optemplate                 |   0.04687500 |          1 |
| problem                    |   0.06250000 |         17 |
| problem_tag                |   0.03125000 |          0 |
| profiles                   |   0.12500000 |        456 |
| proxy_autoreg_host         |   0.03125000 |          0 |
| proxy_dhistory             |   0.04687500 |          0 |
| proxy_history              |   0.03125000 |          0 |
| regexps                    |   0.03125000 |          5 |
| rights                     |   0.04687500 |          7 |
| screen_user                |   0.04687500 |          0 |
| screen_usrgrp              |   0.04687500 |          1 |
| screens                    |   0.04687500 |         75 |
| screens_items              |   0.09375000 |        252 |
| scripts                    |   0.06250000 |          3 |
| service_alarms             |   0.04687500 |          0 |
| services                   |   0.03125000 |          0 |
| services_links             |   0.04687500 |          0 |
| services_times             |   0.03125000 |          0 |
| sessions                   |   0.03125000 |          0 |
| slides                     |   0.04687500 |          0 |
| slideshow_user             |   0.04687500 |          0 |
| slideshow_usrgrp           |   0.04687500 |          0 |
| slideshows                 |   0.04687500 |          0 |
| sysmap_element_trigger     |   0.04687500 |          0 |
| sysmap_element_url         |   0.03125000 |          0 |
| sysmap_shape               |   0.03125000 |          5 |
| sysmap_url                 |   0.03125000 |          0 |
| sysmap_user                |   0.04687500 |          0 |
| sysmap_usrgrp              |   0.04687500 |          0 |
| sysmaps                    |   0.07812500 |          1 |
| sysmaps_elements           |   0.09375000 |         12 |
| sysmaps_link_triggers      |   0.04687500 |          0 |
| sysmaps_links              |   0.06250000 |          0 |
| tag_filter                 |   0.04687500 |          0 |
| task                       |   0.04687500 |          0 |
| task_acknowledge           |   0.01562500 |          0 |
| task_check_now             |   0.01562500 |          0 |
| task_close_problem         |   0.01562500 |          0 |
| task_data                  |   0.01562500 |          0 |
| task_remote_command        |   0.01562500 |          0 |
| task_remote_command_result |   0.01562500 |          0 |
| task_result                |   0.03125000 |          0 |
| timeperiods                |   0.01562500 |          0 |
| trends                     |   8.01562500 |       3638 |
| trends_uint                |  60.01562500 |      32084 |
| trigger_depends            |   0.21875000 |       1349 |
| trigger_discovery          |   0.10937500 |        652 |
| trigger_tag                |   0.03125000 |          2 |
| triggers                   |   2.89062500 |       4426 |
| users                      |   0.03125000 |          8 |
| users_groups               |   0.04687500 |          9 |
| usrgrp                     |   0.03125000 |          7 |
| valuemaps                  |   0.03125000 |        253 |
| widget                     |   0.03125000 |         17 |
| widget_field               |   0.10937500 |        152 |
+----------------------------+--------------+------------+

한 번 정리 된 적이 있기 때문에 많지는 않다.

 

4. Zabbix DB 접근

MariaDB [(none)]> use zabbix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

5. 덤프 용량을 줄이기 위해 테이블 truncate

MariaDB [zabbix]> truncate table history;
Query OK, 0 rows affected (0.01 sec)

MariaDB [zabbix]> optimize table history;
+----------------+----------+----------+-------------------------------------------------------------------+
| Table          | Op       | Msg_type | Msg_text                                                          |
+----------------+----------+----------+-------------------------------------------------------------------+
| zabbix.history | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| zabbix.history | optimize | status   | OK                                                                |
+----------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.02 sec)

MariaDB [zabbix]> truncate table history_uint;
Query OK, 0 rows affected (0.02 sec)

MariaDB [zabbix]>  optimize table history_uint;
+---------------------+----------+----------+-------------------------------------------------------------------+
| Table               | Op       | Msg_type | Msg_text                                                          |
+---------------------+----------+----------+-------------------------------------------------------------------+
| zabbix.history_uint | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| zabbix.history_uint | optimize | status   | OK                                                                |
+---------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.01 sec)

4. 용량 확인

select table_name, (data_length + index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema = 'zabbix';

5. 로컬 공간이 적을 시 gzip으로 압축하여 DB 덤프 (os cli에서 진행)

mysqldump -uroot -p zabbix | gzip > /tmp/zabbix.sql.gz

 

6. 데이터베이스 Drop 하기

MariaDB [NONE]> drop database zabbix;

 

7. MySQL 나가기

MariaDB [NONE]> quit
Bye

8. MYsql 서비스 중지

systemctl stop mariadb

9. ibdta*, ib_logfile*  파일 삭제

rm ibdta*, ib_logfile*

10. 필요시 my.cnf 또는 my.ini에서 해당 부분 조정

[mysqld]
innodb_file_per_table #테이블 별 테이블스페이스 사용
innodb_flush_method=O_DIRECT #O/S캐시를 사용하지 않음, O/S와 InnoDB에 이중으로 퍼버링하지 않겠다는 의미, Windows는 무관
innodb_buffer_pool_size=8G #물리 메모리의 50% 정도, InnoDB 버퍼 크기
innodb_log_file_size=2G #위 버퍼 크기의 1/4 정도, ib_logifle 크기

11. MySql 시작

systemctl start mariadb

12. DB 접속하여 Drop한 데이터베이스 생성

 mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> quit
Bye

13. 압축된 덤프파일 Import

 gunzip < /tmp/zabbix.sql.gz | mysql -uroot -p zabbix

14. 확인

 mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zabbix             |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> use zabbix
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [zabbix]> select table_name, (data_length + index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema = 'zabbix';
+----------------------------+------------+------------+
| table_name                 | total_mb   | table_rows |
+----------------------------+------------+------------+
| acknowledges               | 0.06250000 |          0 |
| actions                    | 0.04687500 |          8 |
| alerts                     | 0.17187500 |         33 |
| application_discovery      | 0.04687500 |         72 |
| application_prototype      | 0.07812500 |        237 |
| application_template       | 0.04687500 |        353 |
| applications               | 0.17187500 |       1026 |
| auditlog                   | 0.06250000 |          2 |
| auditlog_details           | 0.03125000 |          0 |
| autoreg_host               | 0.04687500 |          0 |
| conditions                 | 0.03125000 |         24 |
| config                     | 0.04687500 |          1 |
| config_autoreg_tls         | 0.03125000 |          1 |
| corr_condition             | 0.03125000 |          0 |
| corr_condition_group       | 0.03125000 |          0 |
| corr_condition_tag         | 0.01562500 |          0 |
| corr_condition_tagpair     | 0.01562500 |          0 |
| corr_condition_tagvalue    | 0.01562500 |          0 |
| corr_operation             | 0.03125000 |          0 |
| correlation                | 0.04687500 |          0 |
| dashboard                  | 0.03125000 |          2 |
| dashboard_user             | 0.04687500 |          0 |
| dashboard_usrgrp           | 0.04687500 |          1 |
| dbversion                  | 0.01562500 |          1 |
| dchecks                    | 0.03125000 |          1 |
| dhosts                     | 0.03125000 |          0 |
| drules                     | 0.04687500 |          1 |
| dservices                  | 0.04687500 |          0 |
| escalations                | 0.06250000 |          0 |
| event_recovery             | 0.04687500 |          6 |
| event_suppress             | 0.06250000 |          0 |
| event_tag                  | 0.03125000 |          0 |
| events                     | 0.04687500 |         23 |
| expressions                | 0.03125000 |         10 |
| functions                  | 0.90625000 |       5756 |
| globalmacro                | 0.03125000 |          5 |
| globalvars                 | 0.01562500 |          1 |
| graph_discovery            | 0.06250000 |        359 |
| graph_theme                | 0.03125000 |          4 |
| graphs                     | 0.54687500 |       1651 |
| graphs_items               | 0.71875000 |       3891 |
| group_discovery            | 0.03125000 |          0 |
| group_prototype            | 0.06250000 |         11 |
| history                    | 0.03125000 |          0 |
| history_log                | 0.03125000 |          0 |
| history_str                | 0.07812500 |        586 |
| history_text               | 0.20312500 |       1033 |
| history_uint               | 0.03125000 |          0 |
| host_discovery             | 0.04687500 |          4 |
| host_inventory             | 0.01562500 |          0 |
| host_tag                   | 0.03125000 |          0 |
| hostmacro                  | 0.42187500 |       1947 |
| hosts                      | 0.25000000 |        294 |
| hosts_groups               | 0.04687500 |        258 |
| hosts_templates            | 0.04687500 |        166 |
| housekeeper                | 0.01562500 |          0 |
| hstgrp                     | 0.03125000 |         26 |
| httpstep                   | 0.03125000 |          0 |
| httpstep_field             | 0.03125000 |          0 |
| httpstepitem               | 0.04687500 |          0 |
| httptest                   | 0.07812500 |          0 |
| httptest_field             | 0.03125000 |          0 |
| httptestitem               | 0.04687500 |          0 |
| icon_map                   | 0.04687500 |          0 |
| icon_mapping               | 0.04687500 |          0 |
| ids                        | 0.01562500 |         50 |
| images                     | 1.53125000 |        155 |
| interface                  | 0.04687500 |         15 |
| interface_discovery        | 0.03125000 |          0 |
| interface_snmp             | 0.01562500 |          8 |
| item_application_prototype | 0.39062500 |       2408 |
| item_condition             | 0.20312500 |       1291 |
| item_discovery             | 0.75000000 |       5693 |
| item_preproc               | 1.89062500 |      11196 |
| item_rtdata                | 0.14062500 |       2027 |
| items                      | 7.17187500 |      11186 |
| items_applications         | 2.06250000 |       7859 |
| lld_macro_path             | 0.03125000 |         91 |
| lld_override               | 0.03125000 |        112 |
| lld_override_condition     | 0.03125000 |        108 |
| lld_override_opdiscover    | 0.01562500 |        115 |
| lld_override_operation     | 0.03125000 |        115 |
| lld_override_ophistory     | 0.01562500 |          0 |
| lld_override_opinventory   | 0.01562500 |          0 |
| lld_override_opperiod      | 0.01562500 |          0 |
| lld_override_opseverity    | 0.01562500 |          0 |
| lld_override_opstatus      | 0.01562500 |        115 |
| lld_override_optag         | 0.03125000 |          0 |
| lld_override_optemplate    | 0.04687500 |          0 |
| lld_override_optrends      | 0.01562500 |          0 |
| maintenance_tag            | 0.03125000 |          0 |
| maintenances               | 0.04687500 |          0 |
| maintenances_groups        | 0.04687500 |          0 |
| maintenances_hosts         | 0.04687500 |          0 |
| maintenances_windows       | 0.04687500 |          0 |
| mappings                   | 0.21875000 |       1795 |
| media                      | 0.04687500 |          1 |
| media_type                 | 0.40625000 |         31 |
| media_type_message         | 0.09375000 |        158 |
| media_type_param           | 0.07812500 |        588 |
| module                     | 0.01562500 |          0 |
| opcommand                  | 0.03125000 |          0 |
| opcommand_grp              | 0.04687500 |          0 |
| opcommand_hst              | 0.04687500 |          0 |
| opconditions               | 0.03125000 |          0 |
| operations                 | 0.03125000 |         15 |
| opgroup                    | 0.04687500 |          0 |
| opinventory                | 0.01562500 |          0 |
| opmessage                  | 0.03125000 |         14 |
| opmessage_grp              | 0.04687500 |          7 |
| opmessage_usr              | 0.04687500 |          0 |
| optemplate                 | 0.04687500 |          1 |
| problem                    | 0.06250000 |         17 |
| problem_tag                | 0.03125000 |          0 |
| profiles                   | 0.12500000 |        430 |
| proxy_autoreg_host         | 0.03125000 |          0 |
| proxy_dhistory             | 0.04687500 |          0 |
| proxy_history              | 0.03125000 |          0 |
| regexps                    | 0.03125000 |          5 |
| rights                     | 0.04687500 |          7 |
| screen_user                | 0.04687500 |          0 |
| screen_usrgrp              | 0.04687500 |          1 |
| screens                    | 0.04687500 |         75 |
| screens_items              | 0.09375000 |        369 |
| scripts                    | 0.06250000 |          3 |
| service_alarms             | 0.04687500 |          0 |
| services                   | 0.03125000 |          0 |
| services_links             | 0.04687500 |          0 |
| services_times             | 0.03125000 |          0 |
| sessions                   | 0.03125000 |          0 |
| slides                     | 0.04687500 |          0 |
| slideshow_user             | 0.04687500 |          0 |
| slideshow_usrgrp           | 0.04687500 |          0 |
| slideshows                 | 0.04687500 |          0 |
| sysmap_element_trigger     | 0.04687500 |          0 |
| sysmap_element_url         | 0.03125000 |          0 |
| sysmap_shape               | 0.03125000 |          5 |
| sysmap_url                 | 0.03125000 |          0 |
| sysmap_user                | 0.04687500 |          0 |
| sysmap_usrgrp              | 0.04687500 |          0 |
| sysmaps                    | 0.07812500 |          1 |
| sysmaps_elements           | 0.09375000 |         12 |
| sysmaps_link_triggers      | 0.04687500 |          0 |
| sysmaps_links              | 0.06250000 |          0 |
| tag_filter                 | 0.04687500 |          0 |
| task                       | 0.04687500 |          0 |
| task_acknowledge           | 0.01562500 |          0 |
| task_check_now             | 0.01562500 |          0 |
| task_close_problem         | 0.01562500 |          0 |
| task_data                  | 0.01562500 |          0 |
| task_remote_command        | 0.01562500 |          0 |
| task_remote_command_result | 0.01562500 |          0 |
| task_result                | 0.03125000 |          0 |
| timeperiods                | 0.01562500 |          0 |
| trends                     | 0.26562500 |       3773 |
| trends_uint                | 2.51562500 |      34842 |
| trigger_depends            | 0.26562500 |       1106 |
| trigger_discovery          | 0.10937500 |        577 |
| trigger_tag                | 0.03125000 |          2 |
| triggers                   | 1.92187500 |       4460 |
| users                      | 0.03125000 |          8 |
| users_groups               | 0.04687500 |          9 |
| usrgrp                     | 0.03125000 |          7 |
| valuemaps                  | 0.03125000 |        253 |
| widget                     | 0.03125000 |         17 |
| widget_field               | 0.10937500 |        152 |
+----------------------------+------------+------------+
166 rows in set (0.01 sec)

MariaDB [zabbix]>
MariaDB [zabbix]> quit
Bye

ls -ltrh
total 1019M
drwx------ 2 mysql mysql 4.0K Sep 27 17:05 mysql
drwx------ 2 mysql mysql 4.0K Sep 27 17:05 performance_schema
-rw-rw---- 1 mysql mysql   52 Feb 18 15:34 aria_log_control
-rw-rw---- 1 mysql mysql  16K Feb 18 15:34 aria_log.00000001
-rw-rw---- 1 mysql mysql 500M Feb 18 15:38 ib_logfile1
srwxrwxrwx 1 mysql mysql    0 Feb 18 15:38 mysql.sock
drwx------ 2 mysql mysql  12K Feb 18 15:48 zabbix
-rw-rw---- 1 mysql mysql  18M Feb 18 15:48 ibdata1
-rw-rw---- 1 mysql mysql 500M Feb 18 15:48 ib_logfile0

이렇게 ibdata1 파일이 클리어 된 모습을 볼 수 있다.

728x90
300x250

'IT > Zabbix' 카테고리의 다른 글

Zabbix + VMware 모니터링 설정  (3) 2022.04.12
(최신) Amazon Linux 2 Zabbix Server 5.0 설치  (0) 2022.01.17
Zabbix agent on Windows Server  (0) 2021.08.17
Zabbix 감시 설정  (0) 2021.07.29
Zabbix Template 설정  (0) 2021.07.29
728x90
반응형

개요

  • 기존 운영 중인 ec2에 NTP 설정이 제대로 되어 있지 않는 대상이 대부분 존재하여, 서버 시간이 10분 이상 차이 나는 경우도 발견됨
  • 장시간으로 봤을 때 시간오차로 인한 서비스에 지장이 발생할 경우도 있고 원할한 트러블슈팅을 하기 어려움
  • Amazon linux 같은 경우 자체 Time sync service로 169.254.169.123의 NTP 서버를 바라볼수 있게 허용 되어 있음
  • 나머지 OS는 따로 설정 해줘야 함(예: centos, ubuntu ...)
  • 대부분 서버가 NTP 설정이 안되어 있거나 베스천 서버로 NTP로 바라보게 되어 있음(잘못설정됨)
  • 공식 설정 참조 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/set-time.html

주의

  • 실행 중인 서비스들에 대해 적용 되려면 재시작 필요하기 때문에
  • 추후 서버 재시작 하기 전에 적용 필요

설정 방법

인스턴스를 연결하고 NTP 서비스를 제거합니다.

sudo yum erase 'ntp*'

chrony 패키지를 설치합니다.

sudo yum install chrony

/etc/chrony.conf 또는 vim과 같은 텍스트 편집기를 사용하여 nano 파일을 엽니다. 파일이 다음 라인을 포함하고 있는지 확인합니다.

server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

이 라인이 존재할 경우, Amazon Time Sync Service가 이미 구성된 상태이기 때문에 다음 단계로 넘어갈 수 있습니다. 라인이 없는 경우에는 파일에 이미 존재하는 다른 server 또는 pool 문 뒤에 라인을 추가하고 변경 사항을 저장합니다.

 

chrony 데몬(chronyd)을 다시 시작합니다.

sudo service chronyd restart
Starting chronyd:                                          [  OK  ]

참고

RHEL 및 CentOS(최대 버전 6까지)에서 서비스 이름은 chrony이 아니라 chronyd입니다.

 

chkconfig 명령을 사용해서 매번 시스템이 부팅할 때마다 시작되도록 chronyd를 구성합니다.

sudo chkconfig chronyd on

chrony가 169.254.169.123 IP 주소를 사용하여 시간을 동기화하고 있는지 확인합니다.

chronyc sources -v
728x90
210 Number of sources = 7

          .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
         / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
        | /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
        ||                                                 .- xxxx [ yyyy ] +/- zzzz
        ||      Reachability register (octal) -.           |  xxxx = adjusted offset,
        ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
        ||                                \\     |          |  zzzz = estimated error.
        ||                                 |    |           \\
        MS Name/IP address         Stratum Poll Reach LastRx Last sample
        ===============================================================================
        ^* 169.254.169.123               3   6    17    43    -30us[ -226us] +/-  287us
        ^- ec2-12-34-231-12.eu-west>     2   6    17    43   -388us[ -388us] +/-   11ms
        ^- tshirt.heanet.ie              1   6    17    44   +178us[  +25us] +/- 1959us
        ^? tbag.heanet.ie                0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? bray.walcz.net                0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? 2a05:d018:c43:e312:ce77:>     0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? 2a05:d018:dab:2701:b70:b>     0   6     0     -     +0ns[   +0ns] +/-    0ns

반환된 출력에서 ^*는 기본 설정된 타임 소스를 나타냅니다.

 

chrony에서 보고된 시간 동기화 지표를 확인합니다.

chronyc tracking
Reference ID    : A9FEA97B (169.254.169.123)
        Stratum         : 4
        Ref time (UTC)  : Wed Nov 22 13:18:34 2017
        System time     : 0.000000626 seconds slow of NTP time
        Last offset     : +0.002852759 seconds
        RMS offset      : 0.002852759 seconds
        Frequency       : 1.187 ppm fast
        Residual freq   : +0.020 ppm
        Skew            : 24.388 ppm
        Root delay      : 0.000504752 seconds
        Root dispersion : 0.001112565 seconds
        Update interval : 64.4 seconds
        Leap status     : Normal

인스턴스가 한국시간 정보를 참조하도록 설정

timedatectl status
# 확인
Local time: Mon 2021-12-20 13:25:50 KST
  Universal time: Mon 2021-12-20 04:25:50 UTC
        RTC time: Mon 2021-12-20 04:25:51
       Time zone: Asia/Seoul (KST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

기존 시간대 설정 파일 백업

mv /etc/localtime /etc/localtime_old

한국 시간대 파일 설정

cp -av /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

최종 NTP 트래픽 확인

cpdump -i eth0 | grep 169.254.169.123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:18:29.753101 IP ip-10-251-22-223.ap-northeast-2.compute.internal.51302 > 169.254.169.123.ntp: NTPv4, Client, length 48
13:18:29.753253 IP 169.254.169.123.ntp > ip-10-251-22-223.ap-northeast-2.compute.internal.51302: NTPv4, Server, length 48
13:18:46.020047 IP ip-10-251-22-223.ap-northeast-2.compute.internal.37162 > 169.254.169.123.ntp: NTPv4, Client, length 48
13:18:46.020174 IP 169.254.169.123.ntp > ip-10-251-22-223.ap-northeast-2.compute.internal.37162: NTPv4, Server, length 48

 

변경 작업은 온라인 중에 가능하나,

시스템 재부팅하여 NTP를 맞추기전에 띄워져있던 서비스와 어플리케이션에 시간 적용이 필요함

 

 

 

728x90
300x250
728x90
반응형

실제 관리하는 사람 입장에서 필요한 커맨드라인 정리이다.

 

 

1. 한글 이름 그룹에 속해 있는 멤버 찾기 (인코딩이 포함 되어 있음)

/usr/bin/ldapsearch -xLLL -H ldap://IP주소 -b "cn=팀이름,ou=Group,dc=test,dc=com" |  perl -MMIME::Base64 -MEncode=decode -n -00 -e 's/\n +//g;s/(?<=:: )(\S+)/decode("UTF-8",decode_base64($1))/eg;print'

2. 특정 사용자 패스워드 변경

/usr/bin/ldappasswd -s 변경할 사용자 암호 -w BIND DN 암호 -D cn=manager,dc=test,dc=com -x "uid=사용자,ou=People,dc=test,dc=com"

3. 특정 사용자 삭제

/usr/bin/ldapdelete -x -D cn=manager,dc=test,dc=com -w BIND DN 암호 uid=사용자,ou=People,dc=test,dc=com

4. 부가적인 CONFIG 설정 확인 (like LogLevel)

ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config  -s base

5. 등록된 스키마 리스트 확인

ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn

6. 사용자의 정보 보기

ldapsearch -xLLL -H ldap://IP -b "uid=사용자,ou=People,dc=test,dc=com"
728x90

7. 그룹의 정보 보기

ldapsearch -xLLL -H ldap://IP -b "cn=그룹명,ou=Group,dc=test,dc=com"

8. 쿼리 추가하여 검색하기 (like pwdPolicySubentry 적용자 보기 등)

ldapsearch -Y EXTERNAL -H ldapi:/// -s one -b "ou=People,dc=test,dc=com" -LLL -Q pwdPolicySubentry
728x90
300x250
728x90
반응형

개요

로컬에 fluentd에 의해 efs에 적재되는 로그들에 대해 압축하여 s3로 Upload하는 작업이다. (tmi:efs보다 s3가 비용저렴하다)

aws role 관련 문제에 의해 aws mv가 안 먹히는 부분으로 cp로 진행 하였으며, 모든 복사가 끝나면 삭제 되도록 되어 있다. 적재 되는 로그 상위 폴더의 Naming이 불규칙적이기 때문에 순서로 커트 하였다.

#!/bin/bash

s3Path=s3://test-logs.s3.test.com/fluentd/

/usr/bin/find /test/efs/ -name '*.log' -not -name 'buffer.*' -mtime +0 -exec gzip -9 {} +;
/usr/bin/find /test/efs/ -name '*.log.*' -not -name 'buffer.*' -mtime +0 -exec gzip -9 {} +;

uploadList=(`/usr/bin/find /test/efs -name '*.gz' -not -name 'buffer.*' | cut -f4,5 -d '/'`)
uploadFile=(`/usr/bin/find /test/efs -name '*.gz' -not -name 'buffer.*'`)

/usr/bin/touch /usr/share/script/logUpload.log
/usr/bin/chown -R test. /usr/share/script/logUpload.log

for u in "${!uploadFile[@]}"; do
        /usr/bin/sudo -u test /usr/bin/aws s3 cp ${uploadFile[$u]} s3://test-logs.s3.test.com/fluentd/${uploadList[$u]} >> /usr/share/script/logUpload.log
done

catLog=`cat /usr/share/script/logUpload.log | grep 'upload' | wc -l`

if [ ${catLog} -gt 0 ]
then
   /usr/bin/rm -f ${uploadFile[@]}
   /usr/bin/rm -f /usr/share/script/logUpload.log
else
  echo "not found log" >> /usr/share/script/logUpload.log
fi
728x90
300x250
728x90
반응형

PostgreSQL 문에서 Select으로 리스트를 뽑을 때 Json 형식으로 Row를 Export 하는 방식이다.

row_to_json으로 사용하는 것으로 생각하면 된다.

특정 알파뱃 제외 구문이나 인코딩 방식 등 포함 되어 있으니 보고하실거면 주의 필요함

#-*- coding: euc-kr -*-
import json
import psycopg2
import requests
import sys
import chardet

sys.stdout = open('/usr/share/openldap-servers/userList.json', 'w')

try:
    conn_string = "host='dbsvr.com' dbname='gooddb' user='test' password='test12!@' port='5432'"
    conn = psycopg2.connect(conn_string)
    cur = conn.cursor()
    qry_origin = "select userid, status, empno, username, mailaddr, dutycode, positionname, deptcode, deptname, dutyname, updated_at from view_user where updated_at >= current_timestamp + '-120 minute' and deptcode not like 'E%' and dutyname is not null order by updated_at desc"
    #qry_origin = "select userid, status, empno, username, mailaddr, dutycode, positionname, deptcode, deptname, dutyname, updated_at from view_user where status='ONLINE'
    qry = u"select row_to_json(tmp) from ("+ qry_origin +") tmp;"
    cur.execute(qry)
    rownum = int(cur.rowcount)
    i=0
    while i < rownum:
        result = cur.fetchone()[0]
        print(json.dumps(result, ensure_ascii=False).encode('utf8'))
        i = i + 1
    cur.close()
    conn.close()
except psycopg2.DatabaseError as db_err:
    print('!!! not connected !!!', db_err)

sys.stdout.close()

sys.stdout = open('/usr/share/openldap-servers/userStopList.json', 'w')

try:
    conn_string = "host='dbsvr.com' dbname='gooddb' user='test' password='test12!@' port='5432'"
    conn = psycopg2.connect(conn_string)
    cur = conn.cursor()
    qry_origin = "select userid, status, empno, username, mailaddr, dutycode, positionname, deptcode, deptname, dutyname from view_user where status='STOP'"
    qry = u"select row_to_json(tmp) from ("+ qry_origin +") tmp;"
    cur.execute(qry)
    rownum = int(cur.rowcount)
    i=0
    while i < rownum:
        result = cur.fetchone()[0]
        print(json.dumps(result, ensure_ascii=False).encode('utf8'))
        i = i + 1
    cur.close()
    conn.close()
except psycopg2.DatabaseError as db_err:
    print('!!! not connected !!!', db_err)

sys.stdout.close()
728x90
300x250

+ Recent posts