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中的”创建策略”。

1.png

选择「JSON」选项卡

2.png

将JSON的内容输入

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

请输入策略名称。

4.png

接下来,创建 IAM 角色。

点击 IAM 的“创建角色”按钮

5.png

选择“EC2”作为用例

6.png

选择已制定的策略

7.png

保存后,请对接下来的标签等做恰当处理。

将 IAM 角色分配给 EC2 实例

打开角色分配

8.png

选择所创建的角色

9.png

保存后完成。

安装和配置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。

广告
将在 10 秒后关闭
bannerAds