运维编排场景系列----给实例加到SLS机器组

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: ### 场景简介 我们经常会有这样的运维场景,扩容一批机器需要配置SLS日志,对于已经配置好的SLS Logstore后,我们只需要将机器加到机器组里。 ### 解决方案 传统的解决方案是登录每台ecs实例并安装logtail,执行的命令为 ```shell wget http://logtail-release-{{ACS::RegionId}}.

场景简介

我们经常会有这样的运维场景,扩容一批机器需要配置SLS日志,对于已经配置好的SLS Logstore后,我们只需要将机器加到机器组里。

解决方案

传统的解决方案是登录每台ecs实例并安装logtail,执行的命令为

wget http://logtail-release-{{ACS::RegionId}}.oss-{{ACS::RegionId}}-internal.aliyuncs.com/linux64/logtail.sh
            -O logtail.sh; chmod 755 logtail.sh; ./logtail.sh install {{ACS::RegionId}};
echo {{ LogTailUserDefinedId }} > /etc/ilogtail/user_defined_id

分解下Task,需要以下几步:
1.检查实例是不是Running状态
2.调用云助手CreateCommand创建上述命令
3.调用InvokeCommand执行
4.等待执行成功
5.删除模板

再转换成OOS模板并创建命名为installSlsAgent

{
  "FormatVersion": "OOS-2019-06-01",
  "Description": "Install Logtail agent on the ECS Instance.",
  "Parameters": {
    "InstanceId": {
      "Type": "String",
      "Description": "the Instance Id to install ilogtail",
      "AllowedPattern": "i-[A-Za-z0-9]*",
      "MinLength": 1,
      "MaxLength": 30
    },
    "LogTailUserDefinedId": {
      "Type": "String",
      "Description": "the user defined Id write to /etc/ilogtail/user_defined_id",
      "AllowedPattern": "[A-Za-z0-9\\-_]*",
      "MinLength": 1,
      "MaxLength": 30
    },
    "OOSAssumeRole": {
      "Type": "String",
      "Description": "The RAM role to be assumed by OOS.",
      "Default": "OOSServiceRole"
    }
  },
  "RamRole": "{{OOSAssumeRole}}",
  "Tasks": [
    {
      "Name": "checkInstanceReady",
      "Action": "ACS::CheckFor",
      "Description": "describe instances with specified parameters, refer them here: https://help.aliyun.com/document_detail/63440.html",
      "Properties": {
        "API": "DescribeInstances",
        "Service": "ECS",
        "PropertySelector": "Instances.Instance[].Status",
        "DesiredValues": [
          "Running"
        ],
        "Parameters": {
          "InstanceIds": [
            "{{ InstanceId }}"
          ]
        }
      },
      "Outputs": {
        "InstanceIds": {
          "ValueSelector": "InstanceIdSets.InstanceIdSet[]",
          "Type": "List"
        }
      }
    },
    {
      "Name": "createCommand",
      "Action": "ACS::ExecuteApi",
      "Description": "create the command to install logtail agent.",
      "Properties": {
        "API": "CreateCommand",
        "Service": "ECS",
        "Parameters": {
          "CommandContent": {
            "Fn::Base64Encode": "wget http://logtail-release-{{ACS::RegionId}}.oss-{{ACS::RegionId}}-internal.aliyuncs.com/linux64/logtail.sh -O logtail.sh; chmod 755 logtail.sh; ./logtail.sh install {{ACS::RegionId}}; echo {{ LogTailUserDefinedId }} > /etc/ilogtail/user_defined_id"
          },
          "Name": "oos-{{ACS::TemplateName}}",
          "Type": "RunShellScript"
        }
      },
      "Outputs": {
        "CommandId": {
          "Type": "String",
          "ValueSelector": "CommandId"
        }
      }
    },
    {
      "Name": "invokeCommand",
      "Action": "ACS::ExecuteApi",
      "Description": "invoke the command to install ilogtail",
      "Properties": {
        "Service": "ECS",
        "API": "InvokeCommand",
        "Parameters": {
          "CommandId": "{{ createCommand.CommandId }}",
          "InstanceIds": [
            "{{ InstanceId }}"
          ]
        }
      },
      "Outputs": {
        "InvokeId": {
          "Type": "String",
          "ValueSelector": "InvokeId"
        }
      }
    },
    {
      "Name": "untilInvocationDone",
      "Action": "ACS::WaitFor",
      "Description": "until invocation ready",
      "MaxAttempts": 5,
      "Properties": {
        "Service": "ECS",
        "API": "DescribeInvocations",
        "Parameters": {
          "InvokeId": "{{  invokeCommand.InvokeId }}"
        },
        "DesiredValues": [
          "Finished"
        ],
        "PropertySelector": "Invocations.Invocation[].InvokeStatus"
      }
    },
    {
      "Name": "describeInvocationResult",
      "Action": "ACS::ExecuteApi",
      "Description": "get the command invocation result",
      "Properties": {
        "Service": "Ecs",
        "API": "DescribeInvocationResults",
        "Parameters": {
          "InvokeId": "{{ invokeCommand.InvokeId }}"
        }
      },
      "Outputs": {
        "InvocationResult": {
          "Type": "String",
          "ValueSelector": "Invocation.InvocationResults.InvocationResult[].Output"
        },
        "ExitCode": {
          "Type": "Number",
          "ValueSelector": "Invocation.InvocationResults.InvocationResult[].ExitCode"
        }
      }
    },
    {
      "Name": "deleteCommand",
      "Action": "ACS::ExecuteAPI",
      "Description": "clean up the install ilogtail command",
      "Properties": {
        "Service": "ECS",
        "Risk": "Normal",
        "API": "DeleteCommand",
        "Parameters": {
          "CommandId": "{{ createCommand.CommandId }}"
        }
      }
    }
  ],
  "Outputs": {
    "InvocationResult": {
      "Type": "String",
      "Value": {
        "Fn::Base64Decode": "{{ describeInvocationResult.InvocationResult }}"
      }
    },
    "ExitCode": {
      "Type": "String",
      "Value": "{{ describeInvocationResult.ExitCode }}"
    }
  }
}

以上模板我们很好的解决了单台机器执行Install sls Agent的任务,那么对于多台机器的执行怎么办呢?OOS的Loop功能可以很好的解决这个问题。并且OOS支持模板嵌套执行,那么我们只需要构建一个传入实例ID列表的

{
  "FormatVersion": "OOS-2019-06-01",
  "Parameters": {
    "InstanceIds":{
          "Type": "List",
           "Description": "the instance id list"
    },
    "LogTailUserDefinedId": {
      "Type": "String",
      "Description": "log tail user defined id",
      "MinLength": 1,
      "MaxLength": 30
    }
  },
  "Tasks": [
    {
      "Properties": {
        "TemplateName": "installSlsAgent",
        "Parameters": {
          "InstanceId": "{{ ACS::TaskLoopItem }}",
          "LogTailUserDefinedId": "{{ LogTailUserDefinedId }}"
        }
      },
      "Name": "installSLSAgent",
      "Action": "ACS::Template",
      "Outputs": {
        "ExitCode": {
          "ValueSelector": "ExitCode",
          "Type": "Number"
        }
      },
      "Loop": {
        "Items": "{{ InstanceIds }}",
        "MaxErrors": 100,
        "Concurrency": 10,
        "Outputs": {}
      }
    }
  ],
  "Outputs": {}
}

创建一个执行
1

执行后看详细信息,发现执行已经成功并且可以看到每个loop子task的状态
2

由于子task是一个嵌套执行,我们点击可以看到嵌套的模板执行情况
3

最后到机器组查看机器状态OK说明已经执行成功
4

总结

以上我们介绍了如何使用资源编排OOS批量安装SLS-Agent并加入到机器组中,更多场景待挖掘。目前运维编排(OOS)处于内测中,欢迎试用提意见

欢迎使用OOS

OOS管理控制台的链接: https://home.console.aliyun.com/redirect.htm?productId=ecs&path=automation/region/
OOS帮助文档的链接
OOS客户支持钉钉群:23330931

系列文章

主题文章

阿里云重磅发布云上自动化利器——运维编排OOS

最佳实践

玩转运维编排服务的权限:Assume Role+Pass Role

场景系列

运维编排场景系列-----给ECS实例自动打TAG
运维编排场景系列----从实例中拷贝文件到OSS
运维编排场景系列----给实例加到SLS机器组

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
608 1
|
7天前
|
存储 运维 NoSQL
通过OOS实现定时备份Redis实例转储到OSS
基于阿里云 Redis 备份功能,现结合 OOS 推出自动转储至 OSS 的新方案,解决了数据安全风险、运维繁琐、成本增加和效率低下等问题。新方案亮点包括: 1. 数据安全性提高:备份文件自动上传至OSS,利用OSS的数据冗余存储,保证数据在硬件故障时的持久性和可用性。 2. 完全自动化:设置好定时规则后,备份和转储过程无需人工干预。 3. 多实例多地域集中管理:支持一次选择多个实例和跨区域备份,简化管理。 4. 灵活的备份策略和成本控制:自定义备份频率,并通过OSS生命周期管理策略控制成本。 5. 监控和告警:集成OSS和云监控,实时掌握备份状态,及时处理异常。
131 0
|
7月前
|
Java
Filebeat日志采集器实例 1
Filebeat日志采集器实例
75 1
|
4月前
|
弹性计算 运维 Linux
带你读《云上自动化运维宝典》——ECS多场景迁移上云最佳实践(3)
带你读《云上自动化运维宝典》——ECS多场景迁移上云最佳实践(3)
194 1
|
5月前
|
存储 数据采集 监控
从存储统一到数据融合,SLS在可观测场景的思考和行动
介绍SLS在可观测数据融合分析的一系列技术升级,融合Trace、全栈监控、Continuous Profiling、移动端监控等功能,帮助大家更快速地构筑全栈、自动化的观测能力。
127618 52
|
6月前
|
运维 安全 数据库
渗透攻击实例-系统/服务运维配置不当
渗透攻击实例-系统/服务运维配置不当
|
7月前
|
索引
Filebeat日志采集器实例 2
Filebeat日志采集器实例
35 1
|
7月前
|
弹性计算 运维 jenkins
使用云助手自动化运维云服务器ECS实例
本文为您介绍如何通过阿里云控制台,使用云助手自动化运维云服务器ECS实例。
161 0
|
7月前
|
NoSQL 测试技术 API
从程序员到架构师开发运维场景实战篇:一人一套测试环境
一人一套测试环境 本篇开始讲第16次架构经历:一人一套测试环境。同样,先介绍业务场景。 业务场景:测试环境何时能释放出来使用 当时,公司的基础设施使用的是虚拟机,而且还未迁移到容器。
|
10月前
|
监控 Java 应用服务中间件
简单看看就会的tomcat全家桶(部署-多实例-监控-远程上传-日志-优化等)(下)
简单看看就会的tomcat全家桶(部署-多实例-监控-远程上传-日志-优化等)(下)
130 0