linux-jaeger-setup

jaeger를 다운 받을 위치로 이동한다. 나는 amazon linux 2를 사용했고 일부패키지는 amazon-linux-extra 를 사용했다.

cd /usr/local/src/

위치에서 시작했다.

GOPATH=`pwd`
echo $GOPATH

gopath 를 설정했으면 gopath bin 을 path 로 지정해줘야 한다. 현재위치에서 gopath/bin 은 /usr/local/src/bin 이된다.

export PATH=$PATH:$GOPATH/bin

gopath bin을 설정해줬으면 사전 설치를 한다.

amazon-linux-extras install golang1.11
amazon-linux-extras install epel
curl -sL https://rpm.nodesource.com/setup_8.x | bash -
yum install -y git npm nodejs
npm install -g yarn
go get -u github.com/mjibson/esc
go get github.com/securego/gosec/cmd/gosec

nodejs가 8버전이 필요하다. go 1.11 버전이 최소 요구 버전이다.

이제 본격적인 설치를 시작한다.

git clone https://github.com/jaegertracing/jaeger.git jaeger
cd jaeger/

git clone 뜨고 디렉토리를 이동한다.

설치전에 CONTRIBUTING.md 파일을 꼭읽자.

https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING.md

git submodule update --init --recursive
make install-tools
make build-ui

여기까지 하면 설치가 완료된거다.

go run -tags ui ./cmd/all-in-one/main.go

명령어로 실행한다.

사이트 확인은 16686 포트이다

http://IP:16686/search

으로 접근해서 서비스를 확인하자.

이 화면이 뜨면 정상적으로 설치된거다.

읽어주셔서 감사하다.

jaeger 설치를 마친다.

AWS-Linux-MariaDB-10.5-S3-Storage-Engine-install-실패

mariadb 10.5 version 에서 S3 Storage Engine을 사용하기위해 먼저 repo를 설치하고 s3 engine 를 올리려고 해봤다. 원랜 바이너리 패키지로 지원해야 하는데....

https://mariadb.com/kb/en/using-the-s3-storage-engine/

아무리 찾아봐도 없어서...찾아보니까...

https://jira.mariadb.org/browse/MDEV-22606

The S3 storage engine is included in source code distributions of MariaDB Community Server 10.5. However, it is not currently built and distributed with any of our MariaDB Community Server 10.5 binary packages.

이런내용이 있었다...제길..컴파일해야 하는구나.

그래서 컴파일을 시작했다.

mariadb 컴파일은 생각보다 엄청 오래걸린다. T2.micro 사이즈 기준으로 2시간정도.. 너무 느리다 생각되면 인스턴스 사이즈를 컴파일 할때만 잠깐 늘리거나 인스턴스가 터지지 않게 swap 을 늘려주자.

이전에 포스팅한 swap 만들기가 있다. 참고하자.

하면서 인스턴스용량 때문에 한번 메모리때문에 한번터져서 세번째엔 그냥 T3.large 유형으로 컴파일을 했다.

설치 시작전에 먼저 필요한 패키지를 설치한다.

cmake로 컴파일한다.

# amazon-linuxer-extra install epel-release
# yum install -y cmake gcc gcc-c++ ncurses-devel git curl-devel mhash-devel

먼저 기본설정으로 두가지를 설치하자. epel은 mhash-devel 때문에 설치하는거다.

# wget http://mirrors.supportex.net/mariadb//mariadb-10.5.3/source/mariadb-10.5.3.tar.gz

다운받고

tar zfxv mariadb-10.5.3.tar.gz

압축풀고

cd mariadb-10.5.3

이동하고 컴파일 한다.

# cmake \
-DWITH_READLINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=bundled \
-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_ARIA_STORAGE_ENGINE=1 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DPLUGIN_S3=YES \
-DINSTALL_SYSCONFDIR=/usr/local/mariadb/etc \
-DINSTALL_SYSCONF2DIR=/usr/local/mariadb/etc/my.cnf.d \
-DMYSQL_TCP_PORT=3306 \
-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DMYSQL_DATADIR=/usr/local/mariadb/data \
-DMYSQL_UNIX_ADDR=/usr/local/mariadb/socket/mysql.socket

CMake Error at cmake/plugin.cmake:296 (MESSAGE):
Plugin S3 cannot be built
Call Stack (most recent call first):
CMakeLists.txt:427 (CONFIGURE_PLUGINS)

-DPLUGIN_S3=YES

위 옵션이 먹지 않았다.

https://jira.mariadb.org/browse/MDEV-19416

이리저리 찾아봐도 안된다는 내용만.. source  에 있다해서 신나서 했는데..ㅠㅠ

아직 10.5.3버전에서도 정상적으로 릴리즈되진 않은것으로 보인다.

S3_STORAGE_ENGINE=1 이옵션으로 켜줘야 정상아닌가..그래서

S3_STORAGE_ENGINE옵션을 주고 컴파일 해봤는데... 컴파일은 되는데 플러그인을 확인할수 없었다.

-rwxr-xr-x 1 root root 30008 May 23 06:36 adt_null.so
-rwxr-xr-x 1 root root 22368 May 23 06:36 auth_0x0100.so
-rwxr-xr-x 1 root root 327904 May 23 06:36 auth_ed25519.so
-rwxr-xr-x 1 root root 33488 May 23 06:36 auth_test_plugin.so
-rwxr-xr-x 1 root root 51160 May 23 06:35 caching_sha2_password.so
-rwxr-xr-x 1 root root 343792 May 23 06:35 client_ed25519.so
-rw-r--r-- 1 root root 227 May 11 14:34 daemon_example.ini
-rwxr-xr-x 1 root root 31840 May 23 06:36 debug_key_management.so
-rwxr-xr-x 1 root root 23608 May 23 06:36 dialog_examples.so
-rwxr-xr-x 1 root root 51848 May 23 06:35 dialog.so
-rwxr-xr-x 1 root root 419984 May 23 06:36 disks.so
-rwxr-xr-x 1 root root 59432 May 23 06:36 example_key_management.so
-rwxr-xr-x 1 root root 184128 May 23 06:36 file_key_management.so
-rwxr-xr-x 1 root root 1239672 May 23 06:36 func_test.so
-rwxr-xr-x 1 root root 718464 May 23 06:36 ha_archive.so
-rwxr-xr-x 1 root root 682112 May 23 06:36 ha_blackhole.so
-rwxr-xr-x 1 root root 8822896 May 23 06:36 ha_connect.so
-rwxr-xr-x 1 root root 532336 May 23 06:36 ha_example.so
-rwxr-xr-x 1 root root 874792 May 23 06:36 ha_federated.so
-rwxr-xr-x 1 root root 1526136 May 23 06:36 ha_federatedx.so
-rwxr-xr-x 1 root root 28310200 May 23 06:36 ha_mroonga.so
-rwxr-xr-x 1 root root 3250752 May 23 06:36 handlersocket.so
-rwxr-xr-x 1 root root 126790184 May 23 06:35 ha_rocksdb.so
-rwxr-xr-x 1 root root 1806592 May 23 06:36 ha_sphinx.so
-rwxr-xr-x 1 root root 11633920 May 23 06:36 ha_spider.so
-rwxr-xr-x 1 root root 363776 May 23 06:36 ha_test_sql_discovery.so
-rwxr-xr-x 1 root root 84016 May 23 06:36 libdaemon_example.so
-rwxr-xr-x 1 root root 415792 May 23 06:36 locales.so
-rwxr-xr-x 1 root root 592512 May 23 06:36 metadata_lock_info.so
-rwxr-xr-x 1 root root 29352 May 23 06:36 mypluglib.so
-rwxr-xr-x 1 root root 35656 May 23 06:35 mysql_clear_password.so
-rwxr-xr-x 1 root root 29568 May 23 06:36 qa_auth_client.so
-rwxr-xr-x 1 root root 39152 May 23 06:36 qa_auth_interface.so
-rwxr-xr-x 1 root root 24592 May 23 06:36 qa_auth_server.so
-rwxr-xr-x 1 root root 587624 May 23 06:36 query_cache_info.so
-rwxr-xr-x 1 root root 731952 May 23 06:36 query_response_time.so
-rwxr-xr-x 1 root root 234272 May 23 06:36 server_audit.so
-rwxr-xr-x 1 root root 28576 May 23 06:36 simple_password_check.so
-rwxr-xr-x 1 root root 31152 May 23 06:36 sql_errlog.so
-rwxr-xr-x 1 root root 1281352 May 23 06:36 test_versioning.so
-rwxr-xr-x 1 root root 689104 May 23 06:36 type_test.so
-rwxr-xr-x 1 root root 720048 May 23 06:36 wsrep_info.so

플러그인 리스트를 첨부하는것으로 포스팅을 마친다...

하....이번에도 역시 실패

aws-ec2-user-data-cloud-watch-metric-memory-disk

오늘 포스팅은 사용자 데이터에 대한 포스팅을 할거다.

오늘 추가하는 내용은 cloudwatch 사용자 매트릭을 이용하는것이므로 비용이발생한다.

정말 미미한 비용이지만 비용발생의 거부감이 있다면 따라하지 말것.

이전에 Cloud Watch 를 이용하여 메모리를 모니터링 하는법과 경보를 만드는 방법을 포스팅 했었다.

이건 기본매트릭엔 memory/disk 모니터링이 안되므로 스크립트로 매트릭을 Watch로 전송하는 방식이다. agent 방식도 있으나 내가 선호하는 방식이 아니다.

먼저 사용할 inline 정책이다.

필요 권한

필요한 권한
cloudwatch:PutMetricData
cloudwatch:GetMetricStatistics
cloudwatch:ListMetrics
ec2:DescribeTags

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData",
"ec2:DescribeTags",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics"
],
"Resource": "*"
}
]
}

일단 정책 생성누르고 json 으로 넣는다.

그리고 정책의 이름을 정해서 넣는다

사용권한

나는 ec2-monitoring-policy 로 대충 입력했다. 상황과 사용자에 따라 다르다.

이제 역할을 생성한다.

신뢰 할수있는 유형의 서비스에서 EC2를 선택한다.

미리 생성한 정책을 선택한다.

태그는 사실 대충 입력했다. 하지만 각각 사용자마다의 태그 규칙을 정하고 사용하는것이 좋다.

정상적으로 만들면 신뢰 정책 태그가 생성한 순으로 잘보일것이다.

하나라도 빠져있다면 이상한거다.

오늘의 대상이 되는 인스턴스의 OS는 ubuntu 와 amazon linux2 / contos 이다.

user data 에 사용할 스크립트다

amazon linux2 / contos7

#!/bin/bash
sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64 unzip
cd ~
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip
echo "#disk metric" >> /etc/crontab
echo "#*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron" >> /etc/crontab
systemctl restart crond

ubuntu 14 - 18

#!/bin/bash
sudo apt-get install unzip libwww-perl libdatetime-perl
cd ~
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip
echo "#disk metric" >> /etc/crontab
echo "#*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron" >> /etc/crontab
systemctl restart crond

위의 스크립트는 UserData 에 넣어주면 된다.

현재 스크립트는 주석처리되어 삽입까지만 되고 crontab 에서는 주석처리되어 돌지 않는다. 동작시키려면

echo "#*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron" >> /etc/crontab
echo "*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron" >> /etc/crontab

변경하고 crontab 을 재시작하자.

crontab 에 삽입되며, 5분마다 memory와 disk 사용량에 대한 매트릭을 CloudWatch 로 전송한다.

인스턴스 세부정보 구성에서 아까 생성한 역할을 부여하고, 사용자 데이터에서 위에 올려둔 스크립트를 붙여넣기 한다.

[root@ip-172-31-47-207 ~]# yum history
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
ID | Command line | Date and time | Action(s) | Altered
2 | install -y perl-Switch p | 2020-04-25 00:27 | Install | 50
1 | -t -y --exclude=kernel - | 2020-04-25 00:27 | Update | 1
history list

yum history를 보면 정상적으로 패키지 설치가 된게 보이고,

[root@ip-172-31-47-207 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#disk metric
*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron

정상적으로 crontab에 스크립트도 들어간게 보인다.

그래서 CloudWatch 에서 모두 > linux 시스템 이라는 이름으로 사용자 매트릭이 생성된것이 보일것이다.

여기까지 되면 이제 인스턴스의 메모리와 디스크 모니터링이 가능해졌다.

aws 에서는 기본 매트릭으로 여러가지 모니터링 환경을 제공하는데 memory 와 disk 는 모니터링이 되지 않아 불편한 부분이 있었다.

-_-; 이 포스팅이 도움이 되길 바란다.!

linux-ubuntu-auto-update-diable

vi /etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Unattended-Upgrade "1";

1로 설정된 옵션을 수정하면 자동업데이트는 꺼진다.

그렇다고 해서 업데이트를 할수없는것은 아니고 수동으로 명령어를 쳐서 가능하다.

#unattended-upgrade --dry-run

명령어를 이용해서 확인하자.

curl-openssl_4 to openssl_3

php-curl-openssl 모듈을 사용하게 될 경우 컴파일을 하면 문제가 생겼다.

ubuntu 16 / apache 2.4 / php 5.3 / curl 7.49 / openssl 0.9.8zh

모두 컴파일 된 상태였다.

이과정에서 php 는 CURL_OPENSSL_4 이 아닌 CURL_OPENSSL_3을 요구했고 수정하는 방법이다.

vi  curl-7.54.0/lib/libcurl.vers

HIDDEN
{
local:
__; _rest;
_save*;
};
CURL_OPENSSL_4 -> CURL_OPENSSL_3
{
global: curl_*;
local: *;
};

CURL_OPENSSL_4 부분을 CURL_OPENSSL_3 으로 수정해서 컴파일 하자.

./configure --prefix=/usr/local/curl --with-ssl=/usr/local/openssl --enable-versioned-symbols

mv /usr/lib/x86_64-linux-gnu/libcurl.so.4 /usr/lib/x86_64-linux-gnu/libcurl.so.4.orig

ln -s /usr/local/curl/lib/libcurl.so.4.4.0 /usr/lib/x86_64-linux-gnu/libcurl.so.4

cloudwatch log 매트릭 경보 생성 - log monitoring

오늘의 주제는 인스턴스에서 발생하는 로그를 cloudwatch 로 전송하여 사용하는 법을 포스팅 할거다.

먼저 역할에 정책부터 생성해 보자. 사용하는 정책은 아래와 같다.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
]
}

역할을 인스턴스에 부여하고 인스턴스 내부에서 패키지를 설치해야 한다.

나는 이미 이전에 테스트로 설치해 뒀다.

설치로그이다.

Nov 18 17:17:19 Installed: aws-cli-plugin-cloudwatch-logs-1.4.4-1.amzn2.0.1.noarch
Nov 18 17:17:20 Installed: awslogs-1.1.4-3.amzn2.noarch

실제 설치방법은 yum install 이나 wget 으로 받아 실행하는 방법이 있다.

# yum install awslogs -y

or

# curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
# python ./awslogs-agent-setup.py --region ap-northeast-2

리전지정 옵션을 넣어주는게 좋다 그렇지 않으면 따로 지정해야 한다.

# vi /etc/awslogs/awscli.conf
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-2

그리고 cloudwatch 로 전송할 로그를 지정한다.

# vi /etc/awslogs/awslogs.conf
[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = test
initial_position = end_of_file
log_group_name = linuxer-blog-WG

테스트를 위해 /var/log/messages 를 cloudwatch 로 전송하는 로그이다.

log_stream_name = test
initial_position = end_of_file
log_group_name = linuxer-blog-WG

세개의 옵션이 중요하다. end_of_file 은 뒤부터 추가되는 로그를 watch 로 전송한다.

amazon linux 2 는 systemctl 명령어로 서비스를 시작한다

# systemctl restart awslogsd

설정대로 로그가 올라 오는게 보인다.

중요한 부분은 이벤트 만료시점을 지정해서 로그로 전송된 용량이 과하게 쌓이지 않도록 해야한다.

로그 그룹을 체크하면 지표 필터 생성 버튼이 활성화 되고 지표를 생성한다.

지표는 대충 만들어 볼까한다.

HealthCheck 라는 이름으로 패턴을 설정했다. 보면 샘플로그에서 일치하는 패턴이 보인다. 그리고 지표를 할당한다.

지표생성은 커스텀 매트릭으로 비용이 발생할수 있으니 조심하도록 하자.

생성된 지표를 확인하면 위와같다. 그럼 지표를 확인해보자.

커스텀메트릭이 정상적으로 만들어진걸 확인할수 있다.

그래프도 잘생성 됬는지 보면 잘 올라오는게 보인다. 그럼 실제 로그가 발생해서 그래프가 생성됬는지 확인해보자.

로그가 올라와서 매트릭이 생성된것을 확인할수 있다. 그럼이제 경보를 생성해 보자.

뭔가 훅지나간거 같겠지만 빠진부분은 sns 설정 뿐이다. SNS는 주제를 만들고 구독을 생성하고 구독으로 watch 에서 sns를 추가하면 된다.

경보생성하는 방법은 따로 자세하게 설명하겠다. 블로깅이 시리즈 물이 될 기미가 보인다.

그래프처럼 임계치를 지나서 경보상태로 변경됬다가 정상으로 업데이트가 되는 과정이 보인다 정상적으로 지표로 경보가 작동하는것 까지 확인 되었다.

오늘의 목표인 로그전송으로 지표생성 후 경보 생성까지 완료되었다.

이케이스는 tomcat log로 지표를 생성하거나 어플리케이션에서 에러가 발생한 로그 경보를 생성시키는 등으로 사용할 수 있다.

자세하게 만들고 싶었는데 흐름만 구성한거 같아 좀 찜찜한 부분은 차차 보강하겠다.

읽어주셔 감사하다!

서울-도쿄 리전간 레이턴시 줄이기-실패경험담

페이스북 AKUG에서 다음과 같은 포스팅을 봤다.

https://aws.amazon.com/ko/about-aws/whats-new/2019/10/aws-global-accelerator-supports-ec2-instance-endpoints/?fbclid=IwAR2spSZzdtmHMDVqYwEpZS8W5pEs86t7SMNArZ2fyT81M55QDoDA1dqKuy4

처음엔 아무생각이 없었으나 급 아이디어가 떠올랐다.

EC2 엔드포인트를 지원하면 리전간의 레이턴시를 줄일수 있지 않을까? 그러니까..궁금증은 오픈카톡에서 시작된거였다.

한국과 도쿄리전 간의 레이턴시를 20ms 로 줄일수 있는지가 관건이었다.

AWS Global Accelerator는 TCP/UDP를 지원한다. 그렇다면 OPENVPN을 TCP로 셋팅해서 인스턴스의 앞단에 AWS Global Accelerator 둔다면 과연 빨라질까?

그런 궁금증이었다.

엣지로케이션을 이용하여 라우팅 최적화라고 생각하면 가장 간단하다.

테스트 방식은 총4가지였다

openvpn-도쿄리전(인스턴스) -프라이빗 IP 22 port tcping

openvpn-가속기-도쿄리전(인스턴스) -프라이빗 IP 22 port tcping

openvpn-한국리전(인스턴스)-vpc 피어링-도쿄리전- 프라이빗 IP 22 port tcping

openvpn-가속기- 한국리전(인스턴스)-vpc 피어링-도쿄리전- 프라이빗 IP 22 port tcping

AWS Global Accelerator 셋팅은 아주 간단하다.

Accelerator 를 생성하고 Listeners ID 를 생성할떄 region 을 지정하고 Endpoint groups 을 인스턴스 ID로 설정하면 status 를 업데이트 한다. ALL healthy 로 보이면 정상적으로 연결된것이다.

생성된 Accelerator 은 총3개의 endpoint 를 가진다. IP 두개와 DNS 하나이다.

그럼 테스트로 넘어간다.

가속기를 쓰지않고 도쿄리전의 인스턴스에 openvpn 으로 연결하여 프라이빗 IP로 22번 포트로 tcping 을 테스트 하였다. 총 100회의 tcping 의 time 을 확인할 계획이다.

172.31.26.253에 대한 Ping 통계:
패킷: 보냄 = 10, 받음 = 10, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
최소 = 34ms, 최대 = 35ms, 평균 = 34ms

C:>tcping.exe -n 100 172.31.26.253 22

Ping statistics for 172.31.26.253:22
100 probes sent.
100 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 43.180ms, Maximum = 81.995ms, Average = 64.100ms

가속기를 사용하지 않은 값으로 icmp 34ms / tcping 64ms 가 나온다.

172.31.26.253에 대한 Ping 통계:
패킷: 보냄 = 10, 받음 = 10, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
최소 = 34ms, 최대 = 35ms, 평균 = 34ms

Ping statistics for 172.31.26.253:22
100 probes sent.
100 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 43.065ms, Maximum = 78.722ms, Average = 61.323ms

평균 icmp 34ms / tcping 61ms 정도 확인할수 있었다.

tcping은 속도가 늘어지는 감이 있어서 ping 까지 체크해 보았다.

ping 로는 유효한 내용을 확인할수 없었다. openvpn 으로 접속하여 1194포트로 ping 를 확인하므로 실제 전송은 tcp로 이루어진다.

구성에 대해서 간략하게 설명하고 다음테스트를 진행하려고한다.

피어링은 신청하고 수락하는 단계를 거쳐서 허용된다.

피어링으로 끝이 아니라 두개의 VPC에서 라우팅을 설정해줘야 한다.

현재 서울 172.29.0.0/24 -> pcx 도쿄 172.31.0.0/20 -> pcx 로 라우팅 테이블을 설정 하였다. 테스트는 인스턴스 내부에서 ping 으로 확인하면된다.

사실 이때쯤 테스트가 잘못된것을 알았다.

--- 172.29.0.110 ping statistics ---
22 packets transmitted, 22 received, 0% packet loss, time 21036ms
rtt min/avg/max/mdev = 33.540/33.606/33.679/0.244 ms

vpc 피어링으로 묶은 속도의 평균이 33.5ms 였다.

망내 속도는 두 리전간의 피어링이 제일 빠를거라 생각했기 때문이다.
그래도 포기하지 않고 유효한 데이터를 쌓기위해 테스트를 진행했다.

이즈음 site to site vpn 셋팅이 가물가물 기억이 안나서 좀 이것저것 봤다.

다음 테스트구성은 서울리전 인스턴스에 openvpn으로 연결하고 vpc peering 으로 도쿄 리전과 연결한다. 그리고 ping / tcping 22 번 테스트를 한다.

172.29.0.110에 대한 Ping 통계:
패킷: 보냄 = 10, 받음 = 10, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
최소 = 39ms, 최대 = 40ms, 평균 = 39ms

Ping statistics for 172.29.0.110:22
100 probes sent.
100 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 45.206ms, Maximum = 79.891ms, Average = 60.589ms

Accelerator 를 사용하지 않은 결과로 icmp 39 / tcping 22 60ms 이다.
ICMP는 늘어지는데 TCP는 빨라지는 결과가 나왔다. 뭐지..

그래서 한번더 했다.

Ping statistics for 172.29.0.110:22
100 probes sent.
100 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 46.106ms, Maximum = 85.099ms, Average = 64.571ms

늘어지네... 39/ 60 / 64

172.29.0.110에 대한 Ping 통계:
패킷: 보냄 = 10, 받음 = 10, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
최소 = 40ms, 최대 = 41ms, 평균 = 40ms

Ping statistics for 172.29.0.110:22
100 probes sent.
100 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 46.406ms, Maximum = 78.911ms, Average = 65.489ms

Ping statistics for 172.29.0.110:22
100 probes sent.
100 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 45.652ms, Maximum = 81.980ms, Average = 66.764ms

40 / 65 /66 시간이 지날수록 속도가 느려졌다. 왜지? Accelerator 가 가까운 거리에선 라우팅을 한번 더 들어가게 되는건 아닐까 하는 생각이 들었다.

실제론 엣지를 타게되지만 전송거리가 더 먼건 아닐까...
그런 생각이 들어서 결국 오레곤 리전에 셋팅을 했다. 이젠 근성이다.

10.0.0.227에 대한 Ping 통계:
패킷: 보냄 = 10, 받음 = 10, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
최소 = 136ms, 최대 = 193ms, 평균 = 141ms

Ping statistics for 10.0.0.227:22
100 probes sent.
100 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 145.219ms, Maximum = 283.356ms, Average = 168.073ms

141 / 168 역시 오레곤은 멀다. 그럼 Accelerator 를 사용해 본다.

10.0.0.227에 대한 Ping 통계:
패킷: 보냄 = 10, 받음 = 10, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
최소 = 126ms, 최대 = 127ms, 평균 = 126ms

Ping statistics for 10.0.0.227:22
100 probes sent.
100 successful, 0 failed. (0.00% fail)
Approximate trip times in milli-seconds:
Minimum = 132.458ms, Maximum = 224.706ms, Average = 154.244ms

126 / 154 드디어 Accelerator 를 사용했을때 유효한 결과가 보인다.

한국에서 거리가 먼~오레곤 정도 되어야..속도가 오르는게 확인이 된다.

물론 라우팅이 꼬일대로 꼬인 지역에선 Accelerator가 매우큰 도움이 될것이다.

하지만..여기서 끝내기엔 너무 아쉬웠다. 하.

또 한국리전에 최근에 적용된 기능이 생각났다.

https://aws.amazon.com/ko/about-aws/whats-new/2019/10/aws-client-vpn-now-available-seoul-canada-central-stockholm-northern-california-regions/?fbclid=IwAR3wIXq6EsYCxAV7FN05mDsmVc_mkQH1EzwVF-wUN8EpxTGB1f1zUiZ0_s8

이 테스트는 다음을 기약해야 할것같다..
ㅜㅜ실패의 충격이 크다.

하지만 얻게된 aws의 내부 망에 대한 추측이다.

서울 리전과 도쿄리전은 라우팅이 복잡해서 지연이 있는게 아니라 실제 회선이 지연이 있어서 발생하는 레이턴시다. 그래서 이 레이턴시를 줄이기 위해선 라우팅 최적화나 다른 시도가 필요한게 아니라 회선의 질적인 상향이 필요하다는게 내 결론이다.

오늘의 우승 구성은 " openvpn-가속기-도쿄리전(인스턴스) -프라이빗 IP 22 port tcping " 이다.

오늘은 도쿄에 테스트 했으니까 사요나라!

centos8 rdate의 행방

지금까지 rdate로 시간동기화를 강제로 맞췄다.

ntp를 써도 됬지만 centos5에서 적응한 방식이라 레거시에서 벗어날수 없었다.

ansible 테스트중에 알게됬다.

rdate 가 설치되지 않았다.

TASK [rdate] *
fatal: [13.125.94.121]: FAILED! => {"changed": false, "failures": ["rdate 일치하는 패키지 없음"], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []}
…ignoring

centos8 은 4점대 커널이다. centos7은 3점대고.

이커널 차이에서 오는 가장 큰차이점은 ntp 가 기본이냐, chronyd가 기본이냐다.

centos8 부턴 chronyd 기본지원이므로 이전과 같이 불편하게 설정하지 않아도 될것같다.

[root@ip-172-31-45-50] ~# uname -a
Linux ip-172-31-45-50.ap-northeast-2.compute.internal 4.18.0-80.7.1.el8_0.x86_64 #1 SMP Sat Aug 3 15:14:00 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@ip-172-31-45-50] ~# rpm -qa | grep chronyd
[root@ip-172-31-45-50] ~# rpm -qa | grep chrony
chrony-3.3-3.el8.x86_64

ansible role file module error

ansible 테스트중에 지속적으로 file 모듈에서 에러가 발생했다.

SSH password:

ERROR! 'file' is not a valid attribute for a Play
The error appears to be in '/etc/ansible/roles/locale.yml': line 9, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
-
file:
^ here

---
become: true
become_user: root
hosts: all
name: rdate
tasks: ~
file:
group: users
mode: 493
owner: tomcatadm
path: /opt/oracle
state: present
name: "create a directory for apache tomcat"

yml 형식도 ok 그런데 file 모듈에서 에러가 발생한다.
그냥 권한 바꾸는 간단한 건데 여기에서 오랫동안 막혀있었다.

# ansible all -m file -a 'dest=/home/test state=file mode=755' -k

SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"gid": 1000,
"group": "centos",
"mode": "0755",
"owner": "centos",
"path": "/home/test",
"size": 0,
"state": "file",
"uid": 1000
}

file 모듈 문제일까 싶어서 ansible 명령어로 테스트 해보니 정상. 왜지?

그냥 배열 정리 잘해주니까 된다..

빡치네..

---
become: true
become_user: root
hosts: all
name: rdate
tasks:
- name: test
file:
mode: 766
path: /home/test
state: file

modsecurity-2.9.3 컴파일 에러

centos7 / apache 2.4.36 / mod_security 에러 발생시 해결.

https://forum.directadmin.com/showthread.php?t=56837

In file included from modsecurity.h:49:0,
from apache2_config.c:17:
msc_remote_rules.h:54:9: error: unknown type name 'apr_crypto_key_t'
apr_crypto_key_t **apr_key,
msc_remote_rules.h:55:9: error: unknown type name 'apr_crypto_t'
apr_crypto_t *f,
make[2]: *** [mod_security2_la-apache2_config.lo] Error 1
make[2]: Leaving directory /usr/local/src/modsecurity-2.9.3/apache2′
make[1]: *** [all] Error 2
make[1]: Leaving directory /usr/local/src/modsecurity-2.9.3/apache2'
make: *** [all-recursive] Error 1

처음에 진행한 config

#  ./configure --with-apxs=/usr/local/apache/bin/apxs

apr 관련 에러가 발생한다.

이경우엔 apache 에서 사용하는 apr 이 apr_crypto_key_t 를 지원하지 않는것이다. 라고 생각했는데 아니었다 apr이 지정안되서 그냥 안되는거였다.

#./apachectl -V
Server version: Apache/2.2.34 (Unix)
Server built: Dec 6 2018 13:55:09
Server's Module Magic Number: 20051115:43
Server loaded: APR 1.5.2, APR-Util 1.5.4
Compiled using: APR 1.5.2, APR-Util 1.5.4

사실 그냥하면 될줄알았는데 아니더라...그래서 명시를 해준다.

# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apache/bin/apr-1-config --with-apu=/usr/local/apache/bin/apu-1-config

잘되었다.

;;

허무하네

/usr/local/modsecurity
[root@localhost modsecurity]# ll
합계 0
drwxr-xr-x 2 root root 70 10월 4 16:11 bin
drwxr-xr-x 2 root root 30 10월 4 16:11 lib

#ll /usr/local/modsecurity/lib/mod_security2.so
-rwxr-xr-x 1 root root 2490512 10월 4 16:11 /usr/local/modsecurity/lib/mod_security2.so

잘된다.