菜单
开源

EC2

在本教程中我们将设置Promtail在AWS EC2实例并配置它来发送所有的日志Grafana洛基实例。

需求

在我们开始之前你需要:

  • (一个AWS帐户AWS_ACCESS_KEYAWS_SECRET_KEY)
  • 从互联网上的VPC可路由。(遵循那些指令如果你需要创建一个)
  • 一个SSH公钥。(遵循那些指令如果你需要一个新的)
  • AWS CLI配置(运行aws配置)。
  • Grafana实例与洛基数据源已经配置,您可以使用GrafanaCloud免费试用。

为了简单起见,我们将使用一个Grafana云洛基和Grafana实例,你可以得到一个免费账户为本教程(Grafana云),但所有的步骤都是一样的,如果你运行你自己的开源版本的洛基和Grafana实例。

使它容易学习下面的说明手册,然而在实际设置我们推荐你使用配置工具等起程拓殖,CloudFormation,Ansible厨师

创建一个EC2实例

作为第一步我们要进口我们的SSH密钥AWS,这样我们可以SSH未来EC2实例,让我们运行我们的第一个命令:

aws ec2 import-key-pair——密钥名“promtail-ec2”——public-key-material fileb: / / ~ / . ssh / id_rsa . pub

接下来我们要创建一个安全组组id,一定要注意,我们需要下面的命令:

aws ec2 create-security-group——组名promtail-ec2——描述“ec2 promtail”——vpc-id vpc - 668 d120f {“GroupId”:“sg-02c489bbdeffdca1d”}

现在让我们为SSH和授权入站访问Promtail服务器:

aws ec2 authorize-security-group-ingress——组id sg-02c489bbdeffdca1d协议tcp端口22,cidr 0.0.0.0/0 aws ec2 authorize-security-group-ingress——组id sg-02c489bbdeffdca1d协议tcp端口3100,cidr 0.0.0.0/0

你不需要打开那些端口IPs如上所示,您可以使用自己的IP范围。

我们将创建一个亚马逊Linux 2实例,因为这是一个最受欢迎的,但请使用您选择的AMI。

使用以下命令来创建实例,一定要注意实例id:

aws ec2运行——照片id ami - 016 b213e65284e9c9计数1——实例类型t2。微,键名promtail-ec2——安全组promtail-ec2

使它更有趣的之后我们标记(Name = promtail-demo我们的实例:

aws ec2创建标签——资源我- 041 b0be05c2d5cfad——标签键=名称,值= promtail-demo

标签使你对你的AWS资源以不同的方式进行分类,例如,通过目的、所有者,或环境。这是有用的,当你有许多相同的资源你可以快速识别一个特定的资源根据你分配给它的标签。稍后您将看到,Promtail可以改变这些标签洛基标签

最后让我们抓住的公共DNS实例:

aws ec2举例描述——过滤器“Name =标签:名称、值= promtail-demo”——查询“保留[].Instances [] .NetworkInterfaces [] .Association.PublicDnsName”

并开始一个SSH会话:

ssh ec2 - user@ec2 13 - 59 - 62 - 37. - 2. -东- compute.amazonaws.com

设置Promtail

首先,让我们确保我们作为根用户运行使用sudo - s。接下来,我们将下载、安装并给出可执行的权利Promtail

mkdir / opt / promtail & & cd / opt / promtail curl - o - l“https://github.com/grafana/loki/releases/download/v2.0.0/promtail-linux-amd64.zip”promtail-linux-amd64解压”。邮政“chmod + x”promtail-linux-amd64”

现在我们要下载Promtail配置下面的文件和编辑它,别担心我们将解释这些意味着什么。文件也可以作为依据cyriltovena / promtail-ec2.yaml

curl https://raw.githubusercontent.com/grafana/loki/master/docs/sources/clients/aws/ec2/promtail-ec2.yaml > ec2-promtail。yaml vi ec2-promtail.yaml
服务器:http_listen_port: 3100 grpc_listen_port: 0客户:- url: https:// <用户id >: < api的秘密> @logs-prod-us-central1.grafana.net/loki/api/v1/push职位:文件名:/ opt / promtail /职位。yaml scrape_configs: job_name: ec2-logs ec2_sd_configs:地区:us-east-2 access_key:修订secret_key:修订relabel_configs: - source_labels: [__meta_ec2_tag_Name] target_label:名字行动:取代- source_labels: [__meta_ec2_instance_id] target_label:实例行动:取代- source_labels: [__meta_ec2_availability_zone] target_label:区行动:取代-行动:替换替换:/var/log/**.日志target_label: __path__ - source_labels: [__meta_ec2_private_dns_name]正则表达式:“(. *)“target_label: __host__

服务器部分表明Promtail 3100绑定自己的http服务器。Promtail HTTP页面故障排除服务发现和目标。

客户部分允许您目标洛基实例中,如果你使用GrafanaCloud简单地取代<用户名>< api的秘密>与你的凭证。否则就替换整个URL定制洛基实例。(如http://my-loki-instance.my-org.com/loki/api/v1/push)

Promtail使用相同的普罗米修斯scrape_configs。这意味着如果你已经拥有一个普罗米修斯实例配置会非常相似,容易掌握。

因为我们在AWS EC2上运行我们想使用EC2服务发现,这将允许我们刮关于当前实例元数据(甚至你的自定义标记)并附上我们的日志。这种方式管理和查询日志将会容易得多。

确保替换相应的电流地区,access_keysecret_key,或者你可以使用一个AWS的作用在攻击,这方面的更多信息,见文档ec2_sd_config

最后,relabeling_configs部分有三个目的:

  1. 选择你想要的标签发现附加到你的目标。在我们的例子中,我们保持即instance_id作为实例,标签的名字的名字和的实例。一定要检查出了普罗米修斯ec2_sd_config文档可用标签的完整列表。

  2. 选择Promtail应该找到日志文件尾,在我们的示例中我们要包括所有的日志文件中存在的/var/log使用通配符匹配操作符/var/log/**.log。如果您需要使用多个水珠,你可以添加在你的另一份工作scrape_configs

  3. 确保发现目标只是机器Promtail目前运行在。这是实现通过添加标签__host__使用传入的元数据__meta_ec2_private_dns_name。如果它不匹配当前主机名environnement)变量,目标将会下降。

好的我们应该准备启动Promtail,我们要使用国旗运行它——即将。这是完美的,以确保一切都是正确的,特别是当你仍然和配置。不要担心使用这种模式时,Promtail不会发送任何日志和不会记得任何文件的位置。

。/ promtail-linux-amd64 -config.file =。/ ec2-promtail。yaml——管制

如果一切发展顺利Promtail应该打印日志行标签发现,而不是把他们送去洛基,像如下所示:

2020 - 07 - 08 - t14:51:38 - 0700{文件名= " / var / log / cloud-init。日志”,实例= "我- 041 b0be05c2d5cfad " name = " promtail-demo”,区= " us-east-2c”} 7月07 21:37:24 cloud-init[3035]:实效。py(调试):加载blob没有返回,返回默认值。

不要犹豫地编辑你的配置文件,开始Promtail再次尝试你的配置。

如果你想看现有的目标和可用的标签你可以达到使用公共dns Promtail服务器分配给您的实例:

打开http://ec2 - 13 - 59 - 62 - 37. - 2. -东- compute.amazonaws.com: 3100 /

例如下面的页面是服务发现的页面。它向您展示了所有发现的目标,各自提供标签和出现的原因是不是这样。

发现页面页面

这个页面是有用的了解标签可用于推进重新确认配置还为什么Promtail不是刮你的目标。

配置Promtail作为服务

现在我们已经正确配置Promtail。我们通常希望确保它运行systemd服务,所以它可以自动重启失败或当实例重启。

让我们创建一个新的服务使用vim /etc/systemd/system/promtail.service和复制服务定义如下:

(单位)描述= Promtail[服务]用户=根WorkingDirectory = / opt / Promtail / ExecStartPre 30 ExecStart = = / bin /睡眠/ opt / Promtail / promtail-linux-amd64——config.file =。/ ec2-promtail。yaml SuccessExitStatus = 143 TimeoutStopSec = 10重启=失败RestartSec = 5(安装)WantedBy = multi-user.target

让我们重新加载systemd,启用然后开始Promtail服务:

systemctl daemon-reload systemctl启用promtail。服务systemctl开始promtail.service

你可以验证服务运行正确使用以下命令:

promtail systemctl状态。服务- l●promtail。服务——Promtail加载:加载(/ etc / systemd /系统/ promtail.service;启用;厂商预设:禁用)活动:活动自结婚2020-07-08 15:48:57 UTC(运行);4 s前主要PID: 2732 (promtail-linux) CGroup: / system.slice / promtail。服务└─2732 / opt / promtail / / ec2-promtail promtail-linux-amd64——config.file =。08年7月yaml 15:48:57 ip - 172 - 31 - 45 - 69. - 2. -东- compute.internal systemd [1]: Promtail开始。08年7月15:48:57 ip - 172 - 31 - 45 - 69. - 2. -东- compute.internal systemd [1]: Promtail开始……08年7月15:48:57 ip - 172 - 31 - 45 - 69. - 2. -东- compute.internal promtail-linux-amd64[2732]:水平=警告ts = 2020 - 07 - 08 - t15:48:57.559085451z调用者= filetargetmanager。:98味精=“警告! ! !entry_parser配置弃用,请改变pipeline_stages”7月08年15:48:57 ip - 172 - 31 - 45 - 69. - 2. -东- compute.internal promtail-linux-amd64[2732]:水平= info ts = 2020 - 07 - 08 - t15:48:57.559869071z调用者=服务器。go:179 http=[::]:3100 grpc=[::]:35127 msg="server listening on addresses" Jul 08 15:48:57 ip-172-31-45-69.us-east-2.compute.internal promtail-linux-amd64[2732]: level=info ts=2020-07-08T15:48:57.56029474Z caller=main.go:67 msg="Starting Promtail" version="(version=1.6.0, branch=HEAD, revision=12c7eab8)"

现在可以验证在Grafana洛基已经正确地收到你通过使用实例日志LogQL查询{区= " us-east-2 "}

Grafana洛基日志

发送systemd日志

就像我们对待Promtail,你最有可能管理你的应用程序systemd通常存储应用程序日志journald。Promtail实际上支持抓取日志journald我们来配置它。

我们将编辑以前的配置(vi ec2-promtail.yaml),并添加以下模块scrape_configs部分。

- job_name:期刊杂志:json:假max_age: 12 h路径:/var/log/journal标签:工作:systemd-journal relabel_configs: - source_labels: [‘__journal__systemd_unit] target_label:“单位”

注意,您可以使用重新确认将systemd标签与你想要的。最后确保journald日志的路径是正确的,它可能是不同的在某些系统。

你可以从我们的下载最后的配置示例GitHub库

就是这样,保存配置,你可以重新启动机器(或简单地重新启动服务systemctl重启promtail.service)。

让我们回到Grafana并验证您的Promtail日志中可用Grafana使用LogQL查询{单位= " promtail.service "}在探索。最后确保结帐现场跟踪看到日志出现在洛基摄取。