企业 Saltstack 数据采集系统

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Saltstack 数据采集系统

Grains

Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
由于grains是静态数据,因此不推荐经常去修改它。

应用场景:
信息查询,可用作CMDB。
在target中使用,匹配minion。
在state系统中使用,配置管理模块。

因为grains是存在于minion节点的,并且它的使用方式类似于字典的方式,可以根据需要的指定value值进行提取
例:指定提取minion节点的ipv4地址,也可以指定某一主机

[root@server1 ~]# salt '*' grains.item ipv4	
server3:
    ----------
    ipv4:
        - 127.0.0.1
        - 172.25.254.3
server2:
    ----------
    ipv4:
        - 127.0.0.1
        - 172.25.254.2

[root@server1 ~]# salt server2 grains.item uid
server2:
    ----------
    uid:
        0

想要查看都有哪些key可以使用:salt server2 grains.ls,列出全部的key

自定义grains项

这里的grains也支持自定义,在/etc/salt/minion里打开配置编辑需要指定的项,我自定义roles这个key对应的value是sshd
在这里插入图片描述

[root@server2 ~]# systemctl restart salt-minion.service 	#更改配置需要重启服务

[root@server1 ~]# salt server2 grains.item roles
server2:	#再查看指定的roles就是sshd
    ----------
    roles:
        sshd

这样的自定义方式还是不推荐使用,因为必须要重启服务才可以生效,这对我们来说非常不友好,所以还有另外一种方法来实现目的
在minion节点的/etc/salt/下建立文件grains,编辑这个文件,写入需要自定义的grains值

[root@server3 ~]# vim /etc/salt/grains	#在server3里编辑文件
roles: nginx

[root@server1 ~]# salt server3 saltutil.sync_grains	#master节点同步grains
server3:
[root@server1 ~]# salt server3 grains.item roles		#查看出指定的值
server3:
    ----------
    roles:
        nginx
编写远程执行的grains模块

和编写module类似,也是需要在salt-master的base目录下创建目录_grains,在这个目录下再去编写需要执行的.py文件
例:

[root@server1 ~]# cd /srv/salt/
[root@server1 salt]# mkdir _grains
[root@server1 salt]# vim _grains/grain.py
def my_grain():	#定义函数名
  grains = {}	#创建一个新字典
  grains['roles'] = 'sshd'	#指定字典里的key和value值
  grains['hello'] = 'test'
  return grains		#返回查看的值

[root@server1 salt]# salt '*' saltutil.sync_grains	#同步grains给其他minion
[root@server1 salt]# salt server2 grains.item hello
server2:	#再去获取hello对应的value
    ----------
    hello:
        test

同步之后在其他被同步的节点上和之前一样也是收到同步过来的文件件,还是一样收到指令后去调用本机里的这个文件执行
[root@server2 ~]# ls /var/cache/salt/minion/files/base/_grains/
grain.py

master节点可以通过指定grains来匹配符合条件的minion

[root@server1 salt]# salt -G roles:nginx cmd.run hostname
server3:	#-G是grains,可以符合这个条件roles:nginx,执行显示主机名
    server3

[root@server1 salt]# salt -G hello:test cmd.run hostname
server2:
    server2
server3:
    server3

同时也可以在top文件中使用grains匹配批量主机,例如给部署nginx 的主机都配置“roles: nginx” 使用grain去匹配筛选符合这个条件的主机

[root@server1 salt]# vim top.sls 
base:
  'roles:nginx':		#指定grains
    - match: grain
    - nginx.install		#匹配后执行的操作
[root@server1 salt]# salt '*' state.highstate	#高级推给所有节点
server2是失败的因为不符合,server3成功执行操作

Pillar

pillar和grains一样也是一个数据系统,但是应用场景不同。
pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。
pillar更加适合在配置管理中运用。

因为pillar是不去推送给minion节点的所以就不能在/srv/salt里面写文件,它的base目录可以在/etc/salt/master里搜索pillar_roots 指定路径,默认是/srv/pillar,如果更改了默认路径就需要重启服务
在这里插入图片描述
所以需要创建/srv/pillar目录,再去里面编写执行文件

[root@server1 /]# mkdir /srv/pillar
[root@server1 /]# cd /srv/pillar/

编写的内容可以使用去结合grains的判断执行相应的操作

[root@server1 pillar]# vim packages.sls
{% if grains['fqdn'] == 'server3' %}		#判定如果主机名是server3
package: nginx	#执行操作安装nginx
{% elif grains['fqdn'] == 'server2' %}	#如果是server2
package: httpd	#安装httpd
{% endif %}

如果存在多台主机这里要注意还需要对其他不能匹配的主机也指定操作,现在只有两台minion就不要再去加,不然会报错
package: mariadb

因为pillar是动态信息,只要设定不需要同步就会自动生效
编写一个top文件执行packages.sls

[root@server1 pillar]# vim top.sls
base:
  '*':	#针对所有主机
    - packages	#执行上面编写的packages.sls

[root@server1 pillar]# salt '*' pillar.items	#查看pillar值就会同步更新出来
server2:
    ----------
    package:
        httpd
server3:
    ----------
    package:
        nginx

当需要查看指定项的时时候,或者使用pillar进行匹配的时候就需要先刷新才可以查看到

[root@server1 pillar]# salt '*' saltutil.refresh_pillar	#刷新
server2:
    True
server3:
    True
[root@server1 pillar]# salt '*' pillar.item package	#查看package的值
server2:
    ----------
    package:
        httpd
server3:
    ----------
    package:
        nginx
[root@server1 pillar]# salt -I 'package:httpd' test.ping	#-I表示pillar方式查看
server2:
    True
引用执行

使用pillar进行检索通过定义的判定显示指定的值

[root@server1 pillar]# cd /srv/salt/
[root@server1 salt]# vim apache/init.sls 
web:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}	#pillar里定义package对应server2的值就是httpd
      - php

  file.managed:
    - source: salt://apache/httpd.conf
    - name: /etc/httpd/conf/httpd.conf

  service.running:
    - name: {{ pillar['package'] }}
    - enable: True
    - watch:
      - file: web

[root@server1 salt]# salt server2 state.sls apache #推送执行模块,可以成功执行

Jinja模板

Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。
通过jinja模板可以为不同服务器定义各自的变量。
两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上。

jinja最基本的用法是使用控制结构包装条件

[root@server1 salt]# vim test.sls
/mnt/testfile:	#name就是声明的文件名
  file.append:	#操作方式是建立文件
    {% if grains['fq	dn'] == 'server2' %}
    - text: server2	#文件内容是通过判定grains['fq	dn']截取到的主机名
    {% elif grains['fqdn'] == 'server3' %}
    - text: server3
    {% endif %}
[root@server1 salt]# salt '*' state.sls test		#推送执行

[root@server2 ~]# cat /mnt/testfile 
server2
[root@server3 ~]# cat /mnt/testfile
server3
文件里使用jinja模板

在pillar的指定里添加一个端口的值

[root@server1 salt]# vim /srv/pillar/packages.sls 
{% if grains['fqdn'] == 'server3' %}
package: nginx
{% elif grains['fqdn'] == 'server2' %}
package: httpd
port: 80	#指定端口的值为80
{% endif %}

在执行文件里添加jinja模块

web:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}
      - php

  file.managed:
    - source: salt://apache/httpd.conf
    - name: /etc/httpd/conf/httpd.conf
    - template: jinja	#使用jinja模板
    - context:
      bind: 172.25.254.2	#指定bind对应的值是172.25.254.2

  service.running:
    - name: {{ pillar['package'] }}
    - enable: True
    - watch:
      - file: web

把配置文件里的监听设定改为指定监听ip从bind取,端口从pillar取值

[root@server1 salt]# vim /srv/salt/apache/httpd.conf 
Listen {{ bind }}:{{ pillar['port'] }}

推送执行测试

[root@server1 salt]# salt server2 state.sls apache

[root@server2 ~]# netstat -ntlp | grep httpd
tcp        0      0 172.25.254.2:80         0.0.0.0:*               LISTEN      4784/httpd          

优化操作
还可以进行优化,将配置文件里的ip指定也作为动态取值

[root@server1 salt]# vim /srv/salt/apache/httpd.conf 
Listen {{ grains['ipv4'][-1] }}:{{ pillar['port'] }}
取值grains的ipv4是两个值,前一个是本机的回环接口,第二个是主机ip,[-1]表示倒数第一个

进一步优化
为了方便管理和查看,将配置文件里的变量定义,都放在执行文件里,配置文件里只写取值就可以

[root@server1 salt]# vim /srv/salt/apache/httpd.conf 
Listen {{ bind }}:{{ port }}

[root@server1 salt]# vim /srv/salt/apache/init.sls 
web:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}
      - php

  file.managed:
    - source: salt://apache/httpd.conf
    - name: /etc/httpd/conf/httpd.conf
    - template: jinja
    - context:
      bind: {{ grains['ipv4'][1] }}	#定义ip的变量值
      port: {{ pillar['port']}}		#定义端口的变量值

  service.running:
    - name: {{ pillar['package'] }}
    - enable: True
    - watch:
      - file: web
模块导入方式

这就类似pytho的写法,定义一个模块,然后使用import方式导入
在sal的base目录下创建一个文件,写入需要指定的值或变量

[root@server1 salt]# vim /srv/salt/lib.sls
{% set port = 8080 %}

在httpd配置文件的最上面导入指定的模板文件

[root@server1 salt]# vim /srv/salt/apache/httpd.conf 
{% from 'lib.sls' import port %}

在这里插入图片描述
然后直接去推送执行就可以了,
注意的是,上面我们指定了一次端口,是从pillar里取来的值80,这里又定义里一次,最后生效的会是这个导入模块定义的值。
因为在上面的pillar取值执行后才会执行配=配置文件里导入模块的操作,就会覆盖掉之前的操作。
并且在最后放入/etc/httpd/conf/httpd.conf时,我们导入的这个操作行就会被删除,因为如果还存在那httpd的运行就会报错了,无法启动。

Security Onion 2.4.3 企业级分布式部署实战指南 本文详细介绍了Security Onion 2.4.3企业级分布式部署的完整实战流程。针对中大型企业安全监控需求,深入解析了管理节点、传感器节点和搜索节点的分工与配置,提供了从硬件规划、网络架构设计到各节点安装、集群搭建及上线验证的全方位指南,并分享了关键的优化技巧与运维要点,帮助构建稳定、可扩展的网络安全监控平台。 阅读详情

相关推荐

快马AI + Wazuh:三分钟自动化构建企业级安全监控系统

安全信息与事件管理(SIEM)是现代企业安全架构的核心,其原理在于集中收集和分析来自网络、主机及应用的日志数据,通过预定义规则进行关联分析,以实现威胁检测与响应。这项技术的核心价值在于将海量、离散的安全数据转化为可操作的威胁情报,从而提升安全运营的效率和准确性。在实际应用中,SIEM系统广泛用于满足合规审计、入侵检测和事件调查等场景。然而,其部署和配置的复杂性,尤其是自定义规则编写,往往成为技术落地的瓶颈。本文聚焦于如何利用AI代码生成技术,特别是结合Wazuh这一开源SIEM/EDR平台,自动化完成繁琐的

weixin_30617797的博客 349

运维自动化之Saltstack( 三)Saltstack的数据信息采集者Grains和Pillar

Saltstack的数据信息采集者Grains和Pillar一、SaltStack 的配置文件格式及写法 在谈到grains和pillar之前,要和大家先谈一下SaltStack的配置文件写法因为下面谈到的自定义grains和如何配置pillar需要涉及到。 关于SaltStack的所有配置文件都是YAML格式的,编写归则有以下几点: 1.1 配置文件中用空格来表...

weixin_34055787的博客 338

saltstack-最新企业版白皮书

saltstack 企业版白皮书,内容丰富,saltstack 企业版白皮书,内容丰富,

saltsatck- 远程执行、数据采集系统(grains与pillar详解)、job管理、salt-ssh与salt-syndic+salt-api配置

下载: [root@foundation50 images]# cd /mnt/pub/docs/saltstack/ [root@foundation50 rhel7]# cp -r 3000/ /var/www/html/ 将下载好的3000版本saltsatck拷贝到server1上 [root@server1 ~]# cd /etc/yum.repos.d/ [root@server1 yum.repos.d]# vim saltstack.repo 编写 软件仓库 [saltsatc.

qq_43114229的博客 7446

【Python项目】CMDB的搭建07(资产采集saltstack的基本概念)

前言:在很久以前,只有几台主机的时候当然不需要什么自动化工具,但是随着硬件成本越来越低廉的今天,随随便便就好几十台服务器,靠手工不是搞不定,但是反复的重复着没有太多技术的操作一定会让人抓狂的的,所以有必要选择一个可以批量操作部署的自动化工具,诸如Pupet,ansible,rundeck,faric之类的工具,对于saltstack比较感兴趣,简单汇总一下基本的概念,操作等。 ...

Jian Sun_的博客 824

如何在 Saltstack 组件下收集被控主机的信息?

什么是 grainsgrains是Saltstack最重要的组件之一,grains的作用是收集被控主机的基本信息,这些信息通常都是一些静态类数据,包括CPU、内核、操作系...

JackTian 921

通过Python使用saltstack收集服务器资产信息自动入库

由于各种因素导致公司服务器资产信息不完善,想要重新整理一份资产信息表,借鉴《通过Python使用saltstack生成服务器资产清单》的脚本稍微修改,完善自己想要的资产信息,并写入数据库!在此做个记录,以便后期资产更新。 脚本内容如下: # coding=utf-8 import salt.client as sc import MySQLdb db = MySQLdb.connec

蜷缩的蜗牛 5877

SaltStack入门

saltstack介绍 SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。 通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等。 自动化运维工具 常用的自动化运维工具有: p

weixin_47726353的博客 217

系统部署知识汇总】第15章——自动化运维--saltstack

⾃动化运维–saltstack 白树明 ⽬录 01 ⾃动化运维介绍 02 Saltstack介绍 03 Saltstack部署 04 使⽤saltstack部署环境 ⾃动化运维介绍 01 运维⾃动化介绍 背景 传统的IT运维是将数据中⼼中的⽹络设备、服务器、数据库、中间件、存储、虚拟化、硬件 等资源进⾏统⼀监控,当资源出现告警时,运维⼈员通过⼯具或者基于经验进⾏排查,找出问 题并加以解决。但是,随...

就叫一片白纸的博客 468

系统部署知识汇总】第15章—— saltstack

自动化运维–saltstack 01 自动化运维介绍 02 Saltstack介绍 03 Saltstack部署 04 使⽤saltstack部署环境 自动化运维介绍 01 运维自动化介绍 背景: 传统的IT运维是将数据中⼼中的⽹络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进⾏统⼀监控,当资源出现告警时,运维⼈员通过⼯具或者基于经验进⾏排查,找出问题并加以解决。但是,随着互...

就叫一片白纸的博客 274

自动化运维与Saltstack

一、自动化运维介绍 1、自动化运维产生背景   传统的IT运维是将数据中心中的网络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行排查,找出问题并加以解决。但是,随着互联网+时代的到来,移动互联网、云计算和大数据技术得到了广泛应用,从而导致企业所管理的IT架构不断扩大,服务器、虚拟化、存储设备的数量越来越多,网络也变得...

anmi3721的博客 242

华为HCIP-openEuler认证实战指南:从零搭建企业级集群到自动化运维

本文详细介绍了华为HCIP-openEuler认证的实战指南,涵盖从零搭建企业级集群到自动化运维的全过程。通过openEuler的高性能与高可靠性,结合华为认证体系,帮助中级运维人员掌握集群架构设计、自动化运维工具(如SaltStack和Ansible)、监控告警系统配置等核心技能,适用于金融、电信等关键领域。

oil88的博客 754

Colibri 模型边缘运行时 ABI 全解析:在分布式推理链上以 C 边界本地持有 Tokenizer、Embedding 与模型输出头

[docs/edge-runtime.md](https://link.gitcode.com/i/368d102f25ce309ee3dfacd3b380cc80) 定义的 Edge Runtime ABI 是 Colibri 面向分布式推理的引擎中立 C 边界:让一个"对话进程"只在本机持有 tokenizer、token embedding、最终归一化与输出头(LM head),而把全部 T

gitblog_01189的博客 661

2025年系统管理员开源工具选型指南:从基础架构到智能运维的全面解决方案

在数字化转型浪潮中,系统管理员面临着前所未有的挑战:如何在有限的预算下构建稳定、高效且可扩展的IT基础设施?开源软件为这一问题提供了最佳答案。Awesome Sysadmin项目汇集了超过300个精选开源工具,覆盖了从自动化部署到监控告警的全方位需求。本文将基于这一权威资源库,为技术决策者和运维团队提供一套完整的开源工具选型框架,帮助您构建现代化的IT运维体系。 ## 开源系统管理工具的核心价值

gitblog_00313的博客 919

3个实用工具帮你轻松管理服务器和基础设施

作为一名系统管理员,你是否经常为寻找合适的工具而烦恼?面对海量的开源项目,如何快速找到适合自己需求的管理工具?今天,我将为你介绍一个宝藏资源库——Awesome Sysadmin,它汇集了各类优秀的开源系统管理工具,让你轻松应对日常运维工作。 **核心关键词**:系统管理工具、开源运维软件、服务器管理工具 **长尾关键词**:开源系统管理软件推荐、服务器监控工具选择、基础设施管理解决方案 #

gitblog_01029的博客 935

Security Onion 2.4新范式:免费开源威胁狩猎与企业安全监控平台全解析

你是否还在为企业网络安全监控的高昂成本而困扰?是否在寻找一款集成威胁狩猎、日志管理和安全分析的一体化解决方案?Security Onion 2.4作为免费开源的安全监控平台,正以全新范式改变企业安全运营的格局。本文将全面解析这一平台的核心功能、部署流程和实战价值,帮助你快速构建专业级安全监控体系。 ## 平台概述:Security Onion 2.4的核心价值 Security Onion是一...

gitblog_00730的博客 1094

2020年全新Python高级自动化运维平台开发课程大纲

官方网站: http://www.linuxgc.com Linux资料和Python资料会逐步更新至官网 ,QQ群:964675709 企业自动化运维体验平台 : http://devops.linuxgc.com 用户名:test 密码:12345678 企业CMDB平台: http://cmdb.linuxgc.com 用户名:admin 密码:admin123qwe 阶段一:...

51DevOps-刺天冬 1150

常用的管理工具介绍(监控,集中化)

常用的监控工具 1.zabbix 2.Nagios 3.Ganglia 4.Cacti 5.Open-Falcon Zabbix概述 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题 Zabbix主要组成 Zabbix Server Zabbix Agent Zabbix监控方法 通过SNMP,Zabbix Agent,ping,端口监视等方法提供对远程服务器

weixin_47556601的博客 895
上一篇: 企业 Saltstack安装配置及远程推送
下一篇: 企业 Saltstack 里的Job管理
Howei__
博客等级 码龄7年 42粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Howei__

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

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

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

打赏作者

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

抵扣说明:

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

余额充值