2021 年了,从 CentOS6 上的 EC2 实例发送 CloudWatch 日志
当年是2021年,春天的时候。
在运行中的 EC2 Linux 实例上安装和配置 CloudWatch Logs 代理。
已经成为过时的CentOS 6,但仍有许多仍在运行的环境,也许还有不少。
我管理的一个已经运行8年的项目也是其中之一。
由于框架的限制,无法更新操作系统和语言,但是我们希望尽可能地将管理方式保持现代化。
(由于预算问题,更新框架是难以实现的。)
因此,在CentOS 6环境中,发生了将apache日志流式传输到CloudWatch的情况,尝试后遇到了各种问题,因此决定记录下步骤。
因为我非常喜欢做作业,所以希望各自可以重新解释这一点。
使得可以进行 yum update。
参考: 遇到无法更新yum的问题(CentOS6)
由于CentOS 6于2020年11月30日结束了支持,因此无法使用更新的yum存储库。
因此,需要修改位于/etc/yum.repos.d/下的存储库配置文件,以便使用过去版本的存储库位置CentOS Vault,将其更新为可用状态。
然而,这种适应措施的有效期是未知的。
具体而言,需要将CentOS-Base.repo、CentOS-SCLo-scl-rh.repo、CentOS-SCLo-scl.repo的baseurl修改为Vault的URL。
CentOS-Base.repo 可以翻译成“CentOS 基本软件源配置文件”。
之前
[base]
name = none
baseurl = http://mirror.rightscale.com/centos/6/os/x86_64/archive/latest/
http://ec2-us-east-mirror.rightscale.com/centos/6/os/x86_64/archive/latest/
http://ec2-us-west-mirror.rightscale.com/centos/6/os/x86_64/archive/latest/
failovermethod=priority
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
...省略...
[extras]
name = none
baseurl = http://mirror.rightscale.com/centos/6/extras/x86_64/archive/latest/
http://ec2-us-east-mirror.rightscale.com/centos/6/extras/x86_64/archive/latest/
http://ec2-us-west-mirror.rightscale.com/centos/6/extras/x86_64/archive/latest/
failovermethod=priority
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[updates]
name = none
baseurl = http://mirror.rightscale.com/centos/6/updates/x86_64/archive/latest/
http://ec2-us-east-mirror.rightscale.com/centos/6/updates/x86_64/archive/latest/
http://ec2-us-west-mirror.rightscale.com/centos/6/updates/x86_64/archive/latest/
failovermethod=priority
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
以上答案为:?
↓
以后
[base]
name = none
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
# baseurl = http://mirror.rightscale.com/centos/6/os/x86_64/archive/latest/
# http://ec2-us-east-mirror.rightscale.com/centos/6/os/x86_64/archive/latest/
# http://ec2-us-west-mirror.rightscale.com/centos/6/os/x86_64/archive/latest/
failovermethod=priority
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
...省略...
[extras]
name = none
baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
# baseurl = http://mirror.rightscale.com/centos/6/extras/x86_64/archive/latest/
# http://ec2-us-east-mirror.rightscale.com/centos/6/extras/x86_64/archive/latest/
# http://ec2-us-west-mirror.rightscale.com/centos/6/extras/x86_64/archive/latest/
failovermethod=priority
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[updates]
name = none
baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
# baseurl = http://mirror.rightscale.com/centos/6/updates/x86_64/archive/latest/
# http://ec2-us-east-mirror.rightscale.com/centos/6/updates/x86_64/archive/latest/
# http://ec2-us-west-mirror.rightscale.com/centos/6/updates/x86_64/archive/latest/
failovermethod=priority
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
CentOS-SCLo-scl-rh.repo 的意思是 CentOS Software Collections Library for Red Hat Software Collections Repository.
在之前
[centos-sclo-rh]
name=CentOS-6 - SCLo rh
#baseurl=http://mirror.centos.org/centos/6/sclo/$basearch/rh/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=6&repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
以下是根据您的原文的中文释义:
↓
以后/之后
[centos-sclo-rh]
name=CentOS-6 - SCLo rh
baseurl=http://vault.centos.org/centos/6/sclo/$basearch/rh/
#baseurl=http://mirror.centos.org/centos/6/sclo/$basearch/rh/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=6&repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
CentOS-SCLo-scl.repo 的意思是“CentOS Software Collections repository”。
以前
[centos-sclo-sclo]
name=CentOS-6 - SCLo sclo
# baseurl=http://mirror.centos.org/centos/6/sclo/$basearch/sclo/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=6&repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
↓
之后
[centos-sclo-sclo]
name=CentOS-6 - SCLo sclo
baseurl=http://vault.centos.org/centos/6/sclo/$basearch/sclo/
# baseurl=http://mirror.centos.org/centos/6/sclo/$basearch/sclo/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=6&repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
根据需要进行相应操作,例如执行yum update并重新启动。
使您能够使用Python 3.5版本
由于我的环境中的Python已升级至3.6版本(应该是由于Let’s Encrypt相关的原因),所以后述的用于安装awslogs的脚本无法运行。
因此,我需要从SCL(Software Collections)进行额外的安装。
[root@host ~]# python --version
Python 3.6.0
[root@host ~]# yum -y install rh-python35
[root@host ~]# scl enable rh-python35 bash
[root@host ~]# python --version
Python 3.5.1
嘿!(´▽`)ノ
然而,如果不采取以下的预防措施,之后可能会遇到无法找到 libpython3.5m.so 的问题,从而造成困扰。请执行下面的咒语。
[root@host ~]# ln -fs /opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0 /lib64/
将 .aws/credentials 文件备份
由于在我的环境中,使用现有的.aws/credentials文件中的aws_access_key_id和aws_secret_access_key来运行awslogs似乎不起作用,所以我暂时将其备份。
由于这样做可能会导致其他与aws cli相关的问题,请注意根据环境谨慎操作。
[root@host ~]# cd ~/.aws
[root@host .aws]# mv credentials _credentials
创建IAM角色并将其分配给EC2实例
在意外地将凭据保存在↑,还有如何从EC2实例连接到目标CloudWatch的问题上,我们可以利用IAM角色来解决。
看起来,awslogs(实质上是在/var/awslogs/bin中安装的aws cli v1)如果未设置凭据,则会使用IAM角色。
如果目标EC2实例已经分配了其他IAM角色,则应该可以通过将其添加到该角色来解决。
先创建 IAM 策略
点击IAM中的”创建策略”。
选择「JSON」选项卡
将JSON的内容输入
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"*"
]
}
]
}
请输入策略名称。
接下来,创建 IAM 角色。
点击 IAM 的“创建角色”按钮
选择“EC2”作为用例
选择已制定的策略
保存后,请对接下来的标签等做恰当处理。
将 IAM 角色分配给 EC2 实例
打开角色分配
选择所创建的角色
保存后完成。
安装和配置awslogs
提供工作环境
[root@host ~]# cd ~
[root@host ~]# mkdir awslogs
[root@host ~]# cd awslogs
下载安装程序并展开依赖库。
[root@host awslogs]# curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
[root@host awslogs]# curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/AgentDependencies.tar.gz -O
[root@host awslogs]# tar xvf AgentDependencies.tar.gz -C /tmp/
进行安装
由于在这里我们只处理apache的错误日志,所以其他的需自行多次注册。
在将apache日志流到CloudWatch时,设置datetime_format为[%a %b %d %H:%M:%S %Y]是个小技巧。
[root@host awslogs]# python ./awslogs-agent-setup.py --region ap-northeast-1 --dependency-path /tmp/AgentDependencies
Launching interactive setup of CloudWatch Logs agent ...
Step 1 of 5: Installing pip ...DONE
Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ...
Step 3 of 5: Configuring AWS CLI ...
AWS Access Key ID [None]: 【※何も入力せず Enter】
AWS Secret Access Key [None]: 【※何も入力せず Enter】
Default region name [ap-northeast-1]: 【※何も入力せず Enter】
Default output format [None]: 【※何も入力せず Enter】
Step 4 of 5: Configuring the CloudWatch Logs Agent ...
Path of log file to upload [/var/log/messages]: /var/log/httpd/error_log 【※監視対象のログファイルを入力】
Destination Log Group name [/var/log/httpd/error_log]: EXAMPLE-LOG-GROUP 【※ CloudWatch のロググループ名を入力、存在してなかったら自動で作成してくれる】
Choose Log Stream name:
1. Use EC2 instance id.
2. Use hostname.
3. Custom.
Enter choice [1]: 1 【※ 1 を入力】
Choose Log Event timestamp format:
1. %b %d %H:%M:%S (Dec 31 23:59:59)
2. %d/%b/%Y:%H:%M:%S (10/Oct/2000:13:55:36)
3. %Y-%m-%d %H:%M:%S (2008-09-08 11:52:54)
4. Custom
Enter choice [1]: 4 【※ 4 を入力】
Enter customer timestamp format [None]: [%a %b %d %H:%M:%S %Y] 【※ apache のフォーマットに基いた内容を入力】
Choose initial position of upload:
1. From start of file.
2. From end of file.
Enter choice [1]: 1 【※ 1 を入力】
More log files to configure? [Y]: n 【※ 他にも流したいログファイルがある場合は y を入力してこのステップを繰り返す】
Step 5 of 5: Setting up agent as a daemon ...DONE
------------------------------------------------------
- Configuration file successfully saved at: /var/awslogs/etc/awslogs.conf
- You can begin accessing new log events after a few moments at https://console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logs:
- You can use 'sudo service awslogs start|stop|status|restart' to control the daemon.
- To see diagnostic information for the CloudWatch Logs Agent, see /var/log/awslogs.log
- You can rerun interactive setup using 'sudo python ./awslogs-agent-setup.py --region ap-northeast-1 --only-generate-config'
------------------------------------------------------
[root@host awslogs]# chkconfig awslogs on
[root@host awslogs]# service awslogs status
(pid 10675) is running...
(。♥‿♥。) 请用中文转述以下内容,只需给出一种选项:
– “ヽ(=´▽`=)ノ” = “嘻嘻,就是这样啦~”
应该已经创建了CloudWatch的日志组。
如果没有的话,我认为可能出现了某种错误,你可以查看/var/log/awslogs.log。