[AWS] Cloudwatch: ๋ก๊ทธ ๊ตฌ์ฑ in EC2
Fargate๋ Lambda ๊ฐ์ ์์ ๊ด๋ฆฌํ ์๋น์ค๋ฅผ ์ฐ๋ฉด cloudwatch์ ์ํ ๋ก๊น ์ด ์๋์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋ผ์ ์ด๋ฐ๊ฑธ ์ ๊ฒฝ์ ์ธ ํ์๋ ์๋ค.
ํ์ง๋ง EC2๋ก ์ง์ ๋ญ ์ธํ ํด์ ์ด๋ค๋ ์ง, ์จํ๋ ์ค ๊ตฌ์ฑ์์๋ฅผ ์ด๋ค๋ ์ง ํ๋ฉด ์ง์ ๋ก๊ทธ ๊ทธ๋ฃน์ ๊ตฌ์ฑํ๊ณ ๊ฑฐ๊ธฐ์ ๋ก๊ทธ๊ฐ ๋ค์ด๊ฐ๋๋ก ์ธํ ์ ํด์ค์ผ ํ๋ค.
์ฌ๊ธฐ์๋ ํ๋ก์ธ์ค์์ ๋ฐ์ํ ํ์ค ์ถ๋ ฅ์ cloudwatch์ ์ ์ฅํ๋๋ก ๊ตฌ์ฑ์ ํ๋ฒ ํด๋ณด๊ฒ ๋ค.
์๋๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
์์ aws-sdk๋ฅผ ์ฌ์ฉํด์ ์ง์ cloudwatch api๋ก ๋ก๊ทธ๋ฅผ ์ง์ด๋ฃ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด๊ธด ํ๋ค.
์ฌ๊ธฐ์๋ ์ ์๋ง์ ๋ค๋ฃฌ๋ค. ํ์๋ ์ฝ๋์ฒ๋ฆฌํ๋๊ฒ ๋ฒ๊ฑฐ๋ก์์ ๊ทธ๋ ์ง, ๋ฐฉ๋ฒ ์์ฒด๋ ํจ์ฌ ์ฌ์ธ ๊ฒ์ด๋ค.
ํ ์คํธํ๊ฒฝ์ EC2 Amazon Linux 2๋ค.
๋ก๊ทธ ๊ทธ๋ฃน ์์ฑ
๋จผ์ ๋ก๊ทธ ๊ทธ๋ฃน๋ถํฐ ํ๋ ๋ง๋ค์ด์ฃผ๊ฒ ๋ค.

์ ํ๋ฆฌ์ผ์ด์ ์์ฑ (Node.js)
๊ทธ๋ฆฌ๊ณ ๋ก๊ทธ๋ฅผ ์ฐ๊ธฐ ์ํด ๊ฐ๋จํ ๋ฐ๋ชฌ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค.
function sleep(milliseconds) {
return new Promise((resolve) => {
setTimeout(() => resolve(null), milliseconds);
});
}
async function loop() {
while (true) {
console.log(`@ daemon is trying`);
// Do something
const random = Math.random();
console.log(`@ random: ${random}`);
console.log(`$ wait 10 second`);
await sleep(10 * 1000);
}
}
loop();

๊ทธ๋ฆฌ๊ณ , node.js์ ์ถ๋ ฅ์ ํน์ ๋ก๊ทธ ํ์ผ์ ์์์ฃผ๋๋ก ์คํ์ ํด์ค์ผ ํ๋ค.
node.js๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ํ ๋ชจ๋ ์ถ๋ ฅ์ ๊ฐ๋ค๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ํ๊ณ

ํ์ผ์ ์ด์ด๋ณด๋ฉด
์ ๋ค์ด๊ฐ์์ ๊ฒ์ด๋ค.
์ด๊ฑด ์ธ์ด ํน์ฑ์ ๋ฐ๋ผ ์ ๋์ฒํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
nodejs๋ ์์ง๋ง, ์๋์ผ๋ก ๋ก๊ทธํ์ผ์ด ์์ด๋ ๊ฒ์ด ์๋ค๋ฉด ๊ทธ๊ฑธ ์ฐ๋ฉด ๋๋ค.
๊ถํ ๋ถ์ฌ (EC2)
ํ๋ก๊ทธ๋จ์ด cloudwatch์ ์ ๊ทผ์ ํ ์ ์๊ฒ ํ๋ ค๋ฉด, ์๋ ๊ถํ์ ์ค์ผ ํ๋ค.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"*"
]
}
]
}
EC2์ ๊ฒฝ์ฐ์๋ EC2 ์์ฒด์ ์ญํ ์ ๋ถ์ฌํ ์ ์์ผ๋ ๊ทธ๋ ๊ฒ ํ๋ฉด ๋๊ณ , ์จํ๋ ๋ฏธ์ค์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์๋ฅผ ๋ง๋ค์ด์ ๊ทธ ACCESS_KEY์ SECRET_KEY๋ฅผ ์ง์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํด์ผํ ๊ฒ์ด๋ค.
์๋ฌดํผ ๋ฐ๊ฟ์ค๋ค.

cloudwatch-agent ๊ตฌ์ฑ
์ด๊ฒ ๋ก๊ทธํ์ผ์ ์ฝ์ด์ ์๋์ผ๋ก cloudwatch์ ์จ์ค ๋
์์ด๋ค.
๋ชจ๋ํฐ๋ง์ด๋ ์งํ ๊ด๋ฆฌ ๋ฑ๋ฑ์ ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ์ธ๋ฐ, ์ฌ๊ธฐ์๋ ๋ก๊น
์ฉ์ผ๋ก๋ง ์ฐ๊ฒ ๋ค.
๊น๊ณ
sudo yum install amazon-cloudwatch-agent -y

์ค์ ํ์ผ์ ๋ง๋ค์ด์ค๋ค.
sudo vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/home/ec2-user/app/app.log",
"log_group_name": "test-log-group"
}
]
}
}
}
}
๋ง๋ค์๋ ๋ก๊ทธ ๊ทธ๋ฃน๋ช ์ ๋ฃ๊ณ , nodejs(ํน์ ๋ค๋ฅธ ํ๋ก์ธ์ค)์์ ๋ง๋ค์๋ ๋ก๊ทธํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์์ด์ ํธ๋ฅผ ์ฌ์คํํ๋ฉด
sudo systemctl start amazon-cloudwatch-agent
sudo systemctl status amazon-cloudwatch-agent

์ด๋ ๊ฒ ์ ๋ค์ด์์์ ๊ฒ์ด๋ค.
๊ธฐ์กด์ ๋ค์ด์๋ ๋ก๊ทธ์ ๋ํด์๋ ๋๊ธฐํ๋ฅผ ํด์ฃผ๊ณ , ์๋ก ๋ค์ด์์ ๊ฐฑ์ ๋๋ ํญ๋ชฉ์ ๋ํด์๋ ์๋์ผ๋ก ์ถ๊ฐ๋ฅผ ํด์ค๋ค.
์ฐธ์กฐ
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html
https://stackoverflow.com/questions/10815218/where-is-nodejs-log-file