场景简介

我们经常会有这样的运维场景,扩容一批机器需要配置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": {}
}

创建一个执行

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

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

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

总结

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

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

  1. windows服务器日志文件定期清理,运维编排场景系列-----定时清理Windows服务器日志...

    本文介绍在运维编排OOS的控制台,通过OOS服务下的定时运维功能,定时执行一个功能性模版,实现某些需定时管理服务器或定时管理其它服务的需求. 应用背景 运行中的实例内部运行了很多服务程序,随时间的推移 ...

  2. Ansible自动化运维应用场景分析

    1 自动化运维应用场景 1.1 云计算运维工程师核心职能 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UlGEsoEu-1628319257636)(http://w ...

  3. IT 运维监控场景中的故障预警及处理

    更多内容关注微信公众号:fullstack888 [故障场景] 以运维监控系统为例,先给大家分享一个案例: 值班电话响了,有业务人员反映业务系统运行缓慢,部分业务系统处理超时. 运维人员开始忙活了,查 ...

  4. 运维与自动化系列③自动化部署基础与shell脚本实现

    自动化部署基础与shell脚本实现 关于自动化的基础知识: 1.1:当前代码部署的实现方式: 运维纯手工scp到web服务器 纯手工登录git服务器执行git pull或svn服务器执行svn upd ...

  5. 运维与自动化系列①运维与自动化概述

    运维与自动化概述 一:运维工作内容分类: 1).机房运维(负责服务器上下架.IP配置与划分.服务器打标签.机房定期巡检.服务器故障报修.服务器硬件监控) 2).基础设施运维(系统安装及初始化.网络维护 ...

  6. 活动预告|CoodeWisdom 软件智能化开发与运维学术报告系列 第4期(陈鹏飞 中山大学)...

    陈鹏飞 内容简介 题目 面向在线系统的自适应可迁移故障检测.预测及归因方法研究 摘要 大规模在线系统在运行过程中由于内部或者外部的因素会出现性能下降.宕机等故障.为了及时发现和恢复故障, 此类系统会采 ...

  7. 4.2.9 Kafka集群与运维, 应用场景, 集群搭建, 集群监控JMX(度量指标, JConsole, 编程获取, Kafka Eagle)

    目录 3.1 集群应用场景 1 消息传递 2 网站活动路由 3 监控指标 4 日志汇总 5 流处理 6 活动采集 7 提交日志 总结 3.2 集群搭建 3.2.1 Zookeeper集群搭建 3.2. ...

  8. linux比较厉害的运维项目,Linux运维项目实战系列

    ORACLE 博客文章目录(2015-05-27更新) 从接触ORACLE到深入学习,已有好几年了,虽然写的博客不多,质量也参差不齐,但是,它却是成长的历程的点点滴滴的一个见证,见证了我在这条路上的寻 ...

  9. Linux运维系统工程师系列---25

    磁盘管理---文件系统检测与交换分区 (一)文件系统检测 fsck--检查和修复Linux文件系统错误. 何时用? 通常只有身为root,并且文件系统有问题的时候才使用这个命令.正常情况下不要使用此命 ...

最新文章

  1. 从软件到数件,AI生态如何建立自己的“Android”?天云数据CEO直播详解,可预约 | 量子位·视点...
  2. Hibernate Annotation _List/Map
  3. C#中的值类型和引用类型
  4. QML识别模块identifiedmodules
  5. PHP学习之路(二)让我们开始环境搭建(Windows篇)
  6. 学python必会英语单词_Python必备常用英语词汇(一)
  7. 有道云笔记Android app离线缓存,有道云笔记Android版升级 增加笔记离线阅读与收藏...
  8. BZOJ_2179_FFT快速傅立叶_(FFT)
  9. C# async/await 使用总结
  10. PowerBuilder 生成条形码
  11. Windows提示:您的许可证即将过期
  12. 基于RT-Thread的环境监测装置(含IO口模拟8080时序驱动TFT屏幕)
  13. Jekyll 教程——博客功能(blog)
  14. 计算机系统软件最核心软件是,安徽电脑加密软件哪个好-防止泄密
  15. Dataphin核心功能(四):安全——基于数据权限分类分级和敏感数据保护,保障企业数据安全
  16. 分布式事务 (含面试题)- 图解 - 秒懂 - 史上最全
  17. hss网元 java,EPC网络中网元HSS的英文全称是()。
  18. Python之小波分析
  19. 微信营销七(微信朋友圈发文技巧)
  20. 互联网行业各种“眼中体”大集合

热门文章

  1. oracle (+)的可读性,Oracle基础笔记一
  2. mysql排序行号_mysql 取得行号后再排序
  3. python的pypi安装_python pip及安装包安装
  4. ihtml2document能不能根据id获取dom_使用DOM进行XML文件的解析
  5. 语言建立一个学生籍贯管理簿_编写一个Excel自定义函数,身份证信息提取如探囊取物...
  6. python中的字典和集合_Python 字典和集合
  7. oracle插入性能优化,Oracle- insert性能优化
  8. java无锁消费者框架_无锁并行框架多生产者多消费者模型
  9. java super用法_Java基础面试题汇总
  10. 央视记者王冰冰为何走红?博导和研究生写了一篇论文进行了分析