5.1编写ansibleplaybook批量安装二进制

本节重点介绍 : ansible playbook编写

  • rsyslog 和 logrotate
  • service_deploy yaml的编写

配置机器直接的ssh免密码登录

节点主机名host解析

节点主机名写入hosts


echo "192.168.3.200   prome-master01" >> /etc/hosts
echo "192.168.3.201   prome-node01" >> /etc/hosts


master上生成ssh key 并拷贝到node上

ssh-keygen
ssh-copy-id prome-node01

# 测试ssh联通

ssh prome-node01


master 上安装ansible

yum install -y ansible

# 关闭hostcheck 
vim /etc/ansible/ansible.cfg

ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no 

playbook执行时需要设置机器文件

cat <<EOF > /opt/tgzs/host_file
prome-master01
prome-node01
EOF

设置syslog 和logrotate服务

编写yaml文件

cat <<EOF >  init_syslog_logrotate.yaml
- name: init syslog logrotate
  hosts: all
  user: root
  gather_facts:  false
  vars:
      app_log_path: /opt/logs/
      sc_path: /opt/tgzs/
      syslog_conf: syslog_server.conf
      logrotate_conf: logrotate.conf

  tasks:

      - name: mkdir
        file: path={{ app_log_path }} state=directory
      

      - name: copy  files
        copy:
          src: '{{ item.src }}'
          dest: '{{ item.dest }}'
          owner: root
          group: root
          mode: 0644
          force: true

        with_items:
          - { src: '{{ sc_path }}/{{ syslog_conf }}', dest: '/etc/rsyslog.d/{{ syslog_conf }}' }
          - { src: '{{ sc_path }}/{{ logrotate_conf }}', dest: '/etc/logrotate.d/{{ logrotate_conf }}' }
        register: result

      - name: Show debug info
        debug: var=result verbosity=0


      - name: restart service

        systemd:
          name: "{{ item }}"
          state: restarted
          daemon_reload: yes
        with_items:
          - 'rsyslog'
        register: result

      - name: Show debug info
        debug: var=result verbosity=0

EOF

准备 syslog_server.conf 和 logrotate.conf

cat <<EOF >  syslog_server.conf
if $programname == 'alertmanager'               then /opt/logs/alertmanager.log
if $programname == 'prometheus'                 then /opt/logs/prometheus.log
if $programname == 'node_exporter'              then /opt/logs/node_exporter.log
if $programname == 'process_exporter'            then /opt/logs/process_exporter.log
if $programname == 'mysql_exporter'            then /opt/logs/mysql_exporter.log
if $programname == 'redis_exporter'            then /opt/logs/redis_exporter.log
if $programname == 'blackbox_exporter'          then /opt/logs/blackbox_exporter.log
if $programname == 'mysqld_exporter'          then /opt/logs/mysqld_exporter.log
if $programname == 'process-exporter'          then /opt/logs/process-exporter.log
if $programname == 'pushgateway'                then /opt/logs/pushgateway.log
if $programname == 'm3coordinator'              then /opt/logs/m3coordinator.log
if $programname == 'm3dbnode'                   then /opt/logs/m3dbnode.log
EOF


cat <<EOF > logrotate.conf 
/opt/logs/*.log
{
    daily
    missingok
    notifempty
    dateext
    compress
    delaycompress
    copytruncate
    rotate 15
}
EOF

执行

ansible-playbook -i host_file init_syslog_logrotate.yaml

编写ansible 发布服务脚本

cat <<EOF >  service_deploy.yaml
- name:  install
  hosts: all
  user: root
  gather_facts:  false
  vars:
      local_path: /opt/tgzs
      app_dir: /opt/app

  tasks:
      - name: mkdir
        file: path={{ app_dir }}/{{ app }} state=directory
      - name: mkdir
        file: path={{ local_path }} state=directory


      - name: copy  config and service
        copy:
          src: '{{ item.src }}'
          dest: '{{ item.dest }}'
          owner: root
          group: root
          mode: 0644
          force: true

        with_items:
          - { src: '{{ local_path }}/{{ tgz }}', dest: '{{ local_path }}/{{ tgz }}' }
          - { src: '{{ local_path }}/{{ app }}.service', dest: '/etc/systemd/system/{{ app }}.service' }

        register: result
      - name: Show debug info 
        debug: var=result verbosity=0

      - name: tar gz
        shell: rm -rf /root/{{ app }}* ; \
          tar xf {{ local_path }}/{{ tgz }} -C /root/ ; \
          /bin/cp -far /root/{{ app }}*/* {{ app_dir }}/{{ app }}/ \

        register: result
      - name: Show debug info
        debug: var=result verbosity=0

      - name: restart service
        systemd:
          name: "{{ item }}"
          state: restarted
          daemon_reload: yes
          enabled: yes
        with_items:
          - '{{ app }}'
        register: result

      - name: Show debug info
        debug: var=result verbosity=0
EOF


使用这个脚本安装node_exporter

下载node_exporter

wget -O /opt/tgzs/node_exporter-1.1.2.linux-amd64.tar.gz https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz

准备service文件

cat <<EOF> node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/opt/app/node_exporter/node_exporter
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=node_exporter
[Install]
WantedBy=default.target

EOF

执行安装


ansible-playbook -i host_file  service_deploy.yaml  -e "tgz=node_exporter-1.1.2.linux-amd64.tar.gz" -e "app=node_exporter"

本节重点总结 : ansible playbook编写

  • rsyslog 和 logrotate
  • service_deploy yaml的编写
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福大大架构师每日一题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值