# Ansible简介
* 自动化运维工具Ansible
* Ansible基于python开发的自动化运维工具(Saltstack)
* Python语言是运维人员最佳的语言
* 其功能实现基于SSH远程链接服务
* 批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能
## 特点:
* 不需要单独安装客户端,基于SSHD服务的。SSHD久相当于Ansible的客户端。
* 不需要服务端
* 依靠大量的模块实现功能
## 安装Ansible
* yum install epel-release -y
* yum install ansible -y
### 客户端(如果开启selinux则)安装
* yum install libselinux-python -y
### 查看:
![图片](https://uploader.shimo.im/f/J7J6mlBmvgUQFvOh.png!thumbnail)
### ansible配置文件:
![图片](https://uploader.shimo.im/f/ROMWn4Y0xXURspXq.png!thumbnail)
## Ansible配置文件读取顺序
* ANSIBLE_CONFIG (如果设置了环境变量)
* ansible.cfg (在当前目录中)
* ~/.ansible.cfg (在root目录中)
* /etc/ansible/ansible.cfg
## Ansible内置变量
* ansible-connection
* 连接类型到主机。这可以是任何ansible连接插件的名称。SSH协议类型是smart,ssh或paramiko。默认是智能的。基于非SSH的类型将在下一节中介绍。
* ansible_host
* 要连接的主机的名称,如果与您希望提供给它的别名不同。
* ansible_port
* ssh端口号,如果不是22
* ansible_user
* 要使用的默认ssh用户名。
* ansible_user
* 要使用的默认ssh用户名。
* ansible_ssh_pass
* 要使用的ssh密码(永远不要将此变量存储为纯文本;始终使用保险库。请参阅变量和保险柜)
* ansible_ssh_private_key_file
* ssh使用的私钥文件,如果使用多个密钥且不想使用SSH代理。则很有用
* ansible_ssh_common_args
* 此设置始终附加到sftp,scp和ssh的默认命令行。ProxyCommand用于为特定主机(或组)配置
* ansible_sftp_extra_args
* 此设置始终附加到默认的sftp命令行
* ansible_scp_extra_args
* 此设置始终附加到默认scp命令行
* ansible_ssh_extra_args
* 此设置始终附加到默认的ssh命令行
* ansible_ssh_pipelining
* 确定是否使用SSH流水线。这可以覆盖中的pipelining设置ansible.cfg
* ansible_ssh_executable(在2.2版中添加)
* 此设置将覆盖使用系统ssh的默认行为。这可以覆盖中的ssh_executable设置ansible.cfg
* ansible_become
* 等同于ansible_sudo或ansible_su允许强制权限升级
* ansible_become_method
* 允许设置权限提升方法
* ansible_become_user
* 等同于ansible_sudo_user或ansible_su_user允许通过权限提升设置您成为的用户
* ansible_become_pass
* 等效于ansible_sudo_pass或ansible_su_pass允许您设置权限提升密码(永远不要将此变量存储为纯文本;始终使用保管库。请参阅变量和保管库)
* ansible_become_exe
* 等效于ansible_sudo_exe或ansible_su_exe允许您为所选的升级方法设置可执行文件
* ansible_become_flags
* 等效于ansible_sudo_flags或ansible_su_flags允许您设置传递给选定升级方法的标志。这也可以ansible.cfg在sudo_flags选项中全局设置
* ansible_shell_type
* 目标系统的shell类型。除非已将ansible_shell_executable设置为非Bourne(sh)兼容shell,否则不应使用此设置 。默认情况下,命令使用sh-style语法格式化。将此设置为csh或fish将导致在目标系统上执行的命令遵循这些shell的语法。
* ansible_python_interpreter
* 目标主机python路径。这对于具有多个Python或不位于/ usr / bin / python的系统(如* BSD)或/ usr / bin / python 不是2.X系列Python的系统非常有用。我们不使用/ usr / bin / env机制,因为它需要设置远程用户的路径,并假设python可执行文件名为python,其中可执行文件可能被命名为python2.6。
* ansible_shell_executable
* 这将设置ansible控制器将目标机器上使用的shell,将覆盖executable在ansible.cfg其中默认为 / bin / sh的。如果无法使用/ bin / sh(即/ bin / sh未安装在目标计算机上或无法从sudo运行),您应该只更改它
## Ansible软件颜色信息
* 绿色:表示查看信息,对远程主机未作改动的命令
* 红色:批量管理生产错误信息
* 黄色:对远程主机做了相应改动
* 粉色:对操作提出建议或忠告
# Ansible模块
## 参数信息
* path --- 指定远程主机上已有的一个文件数据
* mode --- 修改数据权限值
* owner --- 修改属性
* group --- 修改属组
* state --- directory touch link hard absent
* recurse=yes --- 修改目录权限时,进行递归修改
### 参考:
ansible test -m file -a "path=/backup/test mode=666 owner=dc group=dc" --- 修改文件权限
ansible test -m file -a "path=/backup/test state=directory" --- 创建目录
ansible test -m file -a "path=/backup/test/test01/test02/ state=directory" --- 创建多级目录
ansible test -m file -a "path=/backup/test state=touch" --- 创建文件
ansible test -m file -a "src=/backup/test path=/backup/test_soft_link.txt state=link" --- 创建软链接
ansible test -m file -a "src=/backup/test path=/backup/test_hard_link.txt state=hard" --- 创建硬链接
ansible test -m file -a "path=/backup/test_hard_link.txt state=absent" --- 删除数据操作
ansible test -m file -a "path=/backup/test02.txt state=file" --- 检查文件是否存
## yum --- 批量安装软件模块
* name --- 指定要安装的软件名称
* state --- 安装软件,或是卸载软件
* present --- 安装软件 installed
* latest --- 更新软件
* removed --- 移除软件 absent
### 参考:
ansible test -m yum -a "name=htop state=absent" --- 卸载软件
ansible test -m yum -a "name=htop state=installed" --- 安装软件
ansible test -m yum -a "name=htop state=removed" --- 卸载软件
## service --- 批量管理服务器启动状态
* name --- 管理哪个服务名称
* state --- 指定服务运行状态
* reloaded
* restarted
* started
* stoped
### 参考:
ansible test -m service -a "name=crond state=stopped"
ansible test -m service -a "name=crond state=started"
ansible test -m service -a "name=crond state=restarted"
enabled --- 设置服务是否开机运行
ansible test -m service -a "name=crond enabled=no" --- 开机不运行
ansible test -m service -a "name=crond enabled=yes" --- 开机自动运行服务
## corn --- 批量部署定时任务
* name --- 定义定时任务注释信息
* state --- absent删除定时任务
* disabled --- 给定时任务添加注释
### 参考:
minute hour day month weekday job="ntpdate ntp1.aliyun.com"
ansible定时任务设置命令
01. 要求: 每隔五分钟,进行时间同步
ansible test -m cron -a "minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"
02. 要求: 每周五,晚上10:30, 需要去test
ansible test -m cron -a "name='test' minute=30 hour=22 weekday=5 job='make shufu &>/dev/null'"
说明: 定时任务配置时.需要添加name注释信息,否则会出现反复创建相同定时任务
ansible test -m cron -a "name='test03' state=absent" --- 删除指定定时任务
ansible test -m cron -a "name='test02' job='make shufu &>/dev/null' disabled=yes" --- 给定时任务添加注释
ansible test -m cron -a "name='test02' job='make shufu &>/dev/null' disabled=no" --- 取消定时任务注释
## user --- 批量创建用户
* name --- 创建的用户名称
* password --- 设置用户密码信息,必须设置为密文
* create_home --- yes表示创建家目录,no为不创建家目录
* shell --- 指定用户登录方式 shell=/sbin/nologin
* gourp --- 指定用户属于哪个组,主要组
* groups --- 指定用户属于哪个组,附属组
* uid --- 指定用户uid数值
* state --- absent删除用户
* remove --- yes 删除家目录
### 参考:
ansible test -m user -a "name=alex create_home=no shell=/sbin/nologin" --- 批量创建虚拟用户
ansible test -m user -a "name=alex group=oldboy groups=oldgirl" --- 指定用户所属组
ansible test -m user -a "name=alex uid=2000" --- 指定用户uid
ansible test -m user -a "name=alex state=absent" --- 删除用户
ansible test -m user -a 'name=oldbaby password="$6$oldgirl$kAUTXVC2z1agr1HlmpFe9abFhWKwJ1fNyg64F95U3rVumwQfqOuhV3YkyZU9.H79TChzIKn5epl5M18B199qV1"'
--- 给用户设置密码
### 密码密文生产方式:
* 方法一:
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
mypassword --- 明文密码信息
sha512 --- 明文转换为密文加密方法
mysecretsalt --- 用什么做算法依据生成密文信息
ansible all -i localhost, -m debug -a "msg={{ 'oldboy123' | password_hash('sha512', 'oldgirl') }}
$6$oldgirl$kAUTXVC2z1agr1HlmpFe9abFhWKwJ1fNyg64F95U3rVumwQfqOuhV3YkyZU9.H79TChzIKn5epl5M18B199qV1
实践操作:
[root@m01 ~]# ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'oldboy123') }}"
localhost | SUCCESS => {
"msg": "$6$oldboy123$W3jkmkkVTr.9UStm4S50RT2uIEjB/4GEtaAeVCSZ..uWVN1YGxHvluss9JVfAPV0gSJoGn1qAfxGyttIsTjcz0"
}
* 方法二: 利用python模块功能
yum install python-pip
pip install passlib
优化pip源
~/.pip/pip.conf
中添加或修改:
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
## mount --- 批量挂载模块
* src --- 需要挂载的存储设备
* path --- 挂载点信息
* fstype --- 挂载文件系统类型 NFS
* state --- 挂载和卸载设置参数
* mounted :实现立即挂载,和开机自动挂载(推荐)
* present :只能实现开机自动挂载
* unmounted :立即挂载,但是不能永久卸载
* absent :立即挂载,永久卸载、错误提示
### 参考:
ansible test -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
ansible test -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=unmounted"
## command --- 批量执行命令
command命令执行模块,但命令中不能包含>,<,;,&,|
### 参考:
ansible test -m command -a "cat /etc/hosts"
## shell --- 万能模块
shell是一个万能模块,能够执行shell命令。能够在远程节点上。调用/bash/sh来执行,能够使用特殊参数
### 参考:
ansible test -m shell -a "source /etc/profile"
## script --- 执行主机脚本批量运行在远程主机上
script是一个执行脚本模块,在链接远程主机后、能够在远程主机上运行本地脚本
### 参考:
[root@elastic-stack ~]# cat test.sh
#!/bin/bash
echo `seq 10`
[root@elastic-stack ~]# ansible test -m script -a "/root/test.sh"
10.0.0.122 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 10.0.0.122 closed.\r\n",
"stderr_lines": [
"Shared connection to 10.0.0.122 closed."
],
"stdout": "1 2 3 4 5 6 7 8 9 10\r\n",
"stdout_lines": [
"1 2 3 4 5 6 7 8 9 10"
]
}
## copy --- 批量复制文件模块
copy模块是可以将本地的文件,copy到远程主机上。
### 参数:
* src --- 服务端本地的目录文件
* dest --- 远端主机目录,如果远端目录没有,那么将会创建
* owner --- 目录或文件所属的主
* group --- 目录或文件所属的组
* mode --- 目录或文件的权限
* backup --- 开始数据的备份功能
* remote_src --- 相当于远程主机上的cp功能,备份远程主机的数据、在管理端主机可以没有文件
* content --- 可以百安及文件信息,直接复制到的远程主机、不用再管理的创建文件
### 参考:
ansible test -m copy -a 'src=/root/metricbeat-6.8.2-x86_64.rpm dest=/root/'
## file --- 管理文件和文件属性
### 参数:
* path --- 指定文件路径信息
* mode --- 修改文件权限
* owner --- 修改文件的属主
* group --- 修改文件的属组
* state --- 修改文件状态信息
* hard --- 硬链接、soft --- 软连接、touch --- 创建文件、directory --- 目录
* src --- 针对软链接和硬链接,目录或文件的源路径
* dest --- 针对软连接和硬链接,目录或文件的目标路径
* rescure --- 是否递归修改目录里面文件的属性 yes/no
## blockinfile --- 批量修改文件模块
blockinfile模块可以帮助我们再指定的文件中插入”一段文本“,这段文本时被标记过的,也就是我们在这段文本上做了记号,一边在以后的操作中可以通过”标记“找到文本。然后进行修改、或删除。
## 参数:
* path --- 指定要操作的文件
* block --- 用以指定想要操作的一段文本。此参数有一个别名叫---content---、作用相同
* marker --- ansible会自动为这段文本添加两个标记,一个开始标记"BEGIN ANSIBLE MANAGED BLOCK",结束标记为"END ANSIBLE MANAGED BLOCK"。可以使用marker参数定义标记。例如:marker=#{mark}test,开始标记变成了# BEGIN test,结束为# END test。
* state --- state有两个可选值,present与absent。默认情况下,我们会将指定的一段文本插入到文件中,如果对应的文件中已经存在对应标记文本,默认会过呢更新对应段落。在执行插入操作或更新操作时,state的值为present,默认值就是present,如果对应的文件中已经存在对应标记的文本并且将state的值设置为absent,则表示从文件中删除对应标记段落。
* insertafter --- 在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的后面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的后面。如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为EOF,表示将文本插入到文档末尾。
* insertbefore --- 在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的前面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的前面。如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为BOF,表示将文本插入到文档开头。
* backup --- 是否在修改文件前进行文件备份
* create --- 当要操作的文件不存在时,是否创建对应的文件。
# 使用Ansible搭建Elastaic Stack
## 首先在ansible/hosts文件中定义组
![图片](https://uploader.shimo.im/f/tSLHJFDCGfknTdNs.png!thumbnail)
## 分发密钥
* ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.122
* ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.123
* ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.124
## 编写ansible剧本
### 下载所需环境JDK
* - hosts: elastic-stack
* tasks:
* - name: Download the JDK environment
* yum: name=java-1.8.0-openjdk state=installed
需检查openJDK版本:使用'java -version'
### 写入/etc/profile变量
* - name: Write environment variable-01
* lineinfile: "dest=/etc/profile line='export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre'"
* - name: Write environment variable-02
* lineinfile: "dest=/etc/profile line='export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'"
* - name: Write environment variable-03
* lineinfile: "dest=/etc/profile line='export PATH=$PATH:$JAVA_HOME/bin'"
### 生效环境变量
* - name: Effect environment variable
* shell: 'source /etc/profile'
注: 这里使用生效环境变量,需使用shell,使用command模块会报错。
### 下载并安装公共签名密钥
* - name: Download and install the public signature key
* command: "rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch"
这里会出现警告,需使用yum模块,但yum模块尝试无法下载。
### 传输elasticsearch-RPM包
###官网下载地址wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.6.rpm
* - name: Copy installation package
* copy: src=/root/elasticsearch-6.8.6.rpm dest=/root/
### 安装elasticsearch-RPM包
* - name: Install the elasticsearch
* yum: name=/root/elasticsearch-6.8.6.rpm state=installed
### 关闭swap
* - name: 关闭swap
* command: "swapoff -a"
### elasticsearch内存锁定
* - name: 内存锁定
* replace: path=/etc/elasticsearch/jvm.options regexp='^-Xms.*' replace='-Xms2g'
* - name: 内存锁定2
* replace: path=/etc/elasticsearch/jvm.options regexp="^-Xmx.*" replace='-Xmx2g'
内存锁定是为了让elasticsearch有足够的内存使用,内存锁定的设定为”内存的一半“,当内存大于64G时应当设置低于32G,不然会使系统指针变长。浪费内存。
### elasticsearch配置文件文件更改,集群名称
* - name: Elasticsearch configuration file change, cluster name
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='cluster.name:\ elasticsearch'"
## 针对主master所作更改
* - hosts: el-master-01
* tasks:
### 主机在elasticsearch中所起名称
* - name: Name found in elasticsearch
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='node.name:\ el-master'"
默认,elasticsearch会对主机起名,但会变化。所以为了将来我们好查找,定义主机名称
### 为了减轻主节点压力,所以我们关闭主节点的数据节点
* - name: Close data node
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='node.data:\ false'"
### master01对外提供服务IP
* - name: Provide external service IP
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='network.host:\ 10.0.0.122'"
### 防止脑裂
* - name: Prevent fissure
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='discovery.zen.minimum_master_nodes:\ 2'"
脑裂:当主机宕机后,其余候补机器权重一样。这样的时候,就无法分配,继续正常运行服务。
## 针对于master-02更改
* - hosts: el-master-02
* tasks:
### 主机在elasticsearch中所起名称
* - name: Name found in elasticsearch
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='node.name:\ el-master-02'"
### master02对外提供服务IP
* - name: Provide external service IP
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='node.name:\ el-master-02'"
### 防止脑裂
* - name: Prevent fissure
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='discovery.zen.minimum_master_nodes:\ 1'"
## 针对于master-03更改
* - hosts: el-master-03
* tasks:
### 主机在elasticsearch中所起名称
* - name: Name found in elasticsearch
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='node.name:\ el-master-03'"
### master03对外提供服务IP
* - name: Provide external service IP
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='network.host:\ 10.0.0.124'"
### 防止脑裂
* - name: Prevent fissure
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='discovery.zen.minimum_master_nodes:\ 2'"
## 针对所有主机的操作
* - hosts: elastic-stack
* tasks:
### 锁内存
* - name: lock memory
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='bootstrap.memory_lock:\ true'"
### 集群IP
* - name: The cluster IP
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='discovery.zen.ping.unicast.hosts:\ [\"10.0.0.122\",\"10.0.0.123\",\"10.0.0.124\"]'"
注:这里需把所有的主机IP填入,这样他们会自动发现。
### 配置最少3个节点启动完成,才开始进行集群恢复动作
* - name: 配置最少3个节点启动完成,才开始进行集群恢复动作
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='getway.recover_after_nodes:\ 3'"
### 集群的预期节点
* - name: Cluster expected node
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='getway.expected_nodes:\ 3'"
### 等待凑齐预期节点时间
* - name: Waiting time
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='getway.recover_after_time:\ 5'"
### 禁止启动多个节点
* - name: Multiple nodes are forbidden to start
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='node.max_local_storage_nodes:\ 1'"
### 防止同一个分片的副本放在同一台机器上
* - name: 防止同一个分片的副本放在同一台主机上
* lineinfile: "dest=/etc/elasticsearch/elasticsearch.yml line='cluster.routing.allocation.same_shard.host:\ true'"
### 针对Iptabales优化
* - name: Iptables to optimize the
* lineinfile: "dest=/etc/sysctl.conf line='net.ipv4.ip_forward\ =\ 0\nnet.ipv4.conf.default.rp_filter\ =\ 1\nnet.ipv4.conf.default.accept_source_route\ =\ 0\nkernel.sysrq\ =\ 0\nkernel.core_uses_pid\ =\ 1\nnet.ipv4.tcp_syncookies\ =\ 1\nkernel.msgmnb\ =\ 65536\nkernel.msgmax\ =\ 65536\nkernel.shmmax\ =\ 68719476736\nkernel.shmall\ =\ 5294967296\nvm.max_map_count\ =\ 655360\nvm.swappiness\ =\ 1'"
### modprobe bridge
* - name: modprobe bridge
* shell: "modprobe bridge"
### 生效规则
* - name: Effectibe rules
* shell: 'sysctl -p'
### 更改limits
* - name: Limits to optimize
* lineinfile: "dest=/etc/security/limits.conf line='*\ soft\ nofile\ 65536\n*\ hard\ nofile\ 131072\n*\ soft\ nproc\ unlimited\n*\ hard\ nproc\ unlimited'"
### 加入开机启动
* - name: Add boot start
* shell: "/bin/systemctl daemon-reload"
* - name: Add boot start-2
* shell: "/bin/systemctl enable elasticsearch.service"
### 启动elasticsearch
* - name: Start elasticsearch
* shell: "systemctl start elasticsearch.service"
## 在master02上安装kibana
* - hosts: el-master-02
* tasks:
### 导入弹性PGP密钥
* - name: Import the Elastic PGP key
* command: "rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch"
### 拷贝Kibana-RPM包
###官方下载地址:curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-6.8.6-linux-x86_64.tar.gz
* - name: Copy the Kibana installation package
* copy: "src=/root/kibana-6.8.6-x86_64.rpm dest=/root/"
### 安装Kibana
* - name: Install Kibana
* yum: name=/root/kibana-6.8.6-x86_64.rpm state=installed
### 更改kibana配置文件
* - name: Change the kibana configuration file
* lineinfile: "dest=/etc/kibana/kibana.yml line='server.port:\ 5601\nserver.host:\ \"10.0.0.123\"\nelasticsearch.url:\ \"http://10.0.0.122:9200\"'"
### 加入开机启动
* - name: Kibana join boot start
* command: "systemctl enable kibana.service"
### 启动Kibana
* - name: Kibana join boot start
* command: "systemctl enable kibana.service"
## 所有主机操作
* - hosts:
* tasks:
### 复制Metricbeat-RPM包
###官网下载地址:curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-6.8.6-x86_64.rpm
* - name: Copy the Metricbeat RPM package
* copy: src=/root/metricbeat-6.8.2-x86_64.rpm dest=/root/
### 安装Mentricbeat
* - name: Install Mentricbeat
* yum: name=/root/metricbeat-6.8.6-x86_64.rpm state=installed
### 从Metricbeat安装目录中启动系统模块
* - name: From the Metricbeat installation directory,start the system module
* shell: "metricbeat modules enable system"
### 加入开机启动
* - name: Metricbeat joins the boot
* command: "systemctl enable metricbeat"
### 启动Metricbeat
* - name: Start Metricbeat
* command: "systemctl start metricbeat"
### 复制Logstash-RPM包
* - name: Copy Logstash RPM
* copy: src=/root/logstash-6.8.2.rpm dest=/root/
### 安装Logstash
###官网下载地址:curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-6.8.6.rpm
* - name: Install Logstash
* yum: name=/root/logstash-6.8.2.rpm state=installed