Loading... ###概述: 记录 prometheus 节点详细部署过程。 **注意**: 所有主机监控方式大多为 http 协议抓取模式,所以需要暴露相应的端口,服务端才能抓取。 ### 一:windows window的代理节点安装非常方便,官方提供 exe 和 msi 两种安装方式,都是双击安装即可,记得设置开机启动。 文件下载地址:[https://github.com/martinlindhe/wmi_exporter/releases](https://github.com/martinlindhe/wmi_exporter/releases) 文件默认工作端口为 9182 ,防火墙记得放通端口。其他高级操作自行阅读文档。 ### 二:linux 官方提供 编译安装 、二进制文件 、docker 等多种安装方式,为了方便,这里使用二进制文件进行安装; 文件下载地址:[https://github.com/prometheus/node_exporter/releases](https://github.com/prometheus/node_exporter/releases) 将文件放到合适的位置打开,防火墙放通默认工作端口 9100 如果必要,可以设置为 systemd 服务: ``` #创建node_exporter用户并将node_exporter程序写入systemd服务 sudo groupadd node_exporter sudo useradd -g node_exporter -m -d /data/node_exporter -s /sbin/nologin node_exporter sudo chown -R node_exporter:node_exporter /data/node_exporter sudo vim /etc/systemd/system/node_exporter.service #写入以下配置 [Unit] Description=Node_exporter DefaultDependencies=no [Service] Type=simple User=node_exporter RemainAfterExit=yes ExecStart=/data/node_exporter/node_exporter --collector.textfile.directory=/data/node_exporter/ --web.listen-address=:9100 #根据实际路径修改 Restart=on-failure [Install] WantedBy=multi-user.target sudo systemctl start node_exporter.service sudo systemctl enable node_exporter.service ``` ### 三:交换机 要监控交换机需要安装 snmp_node 代理节点,这个节点可以放在任意一台服务器上,前提是 snmp 节点服务器能和交换机通信,还能与 prometheus 主服务器之间通信。 测试命令: ``` snmpwalk -v 2c 172.16.108.1 -c public ifDescr #可能需要自行安装snmp #centos7 yum install -y net-snmp net-snmp-utils systemctl start snmpd systemctl enable snmpd ``` 文件下载地址:[https://github.com/prometheus/snmp_exporter/releases](https://github.com/prometheus/snmp_exporter/releases) 默认监听端口: 9116 防火墙放通 如有必要,写入 systemd 服务 ``` #创建 snmp_exporter用户并将 snmp_exporter 程序写入systemd服务 sudo groupadd snmp_exporter sudo useradd -g snmp_exporter -m -d /data/snmp_exporter -s /sbin/nologin snmp_exporter sudo chown -R snmp_exporter:snmp_exporter /data/snmp_exporter sudo vim /etc/systemd/system/snmp_exporter.service #写入以下配置 [Unit] Description=prometheus After=network.target [Service] Type=simple User=prometheus ExecStart=/data/snmp_exporter --config.file=/data/snmp_exporter/snmp.yml --storage.tsdb.path=/data/snmp_exporter Restart=on-failure [Install] WantedBy=multi-user.target ``` snmp_exporter默认的snmp版本为1,并且没有指定 Community ,需要修改一下为自己的适配配置 编辑 snmp_exporter 目录下 snmp.yml 修改 if_mib 模块最后一行 ``` version: 2 auth: conmmunity: 123456 #类似于认证口令 ``` 如果有多个交换机 community 不一样,解决办法是复制 if_mib 模块全部内容修改为 if_mib2 再修改为不同的 community 启动 snmp_exporter ``` systemctl start snmp_exporter systemctl enable snmp_exporter ``` 验证是否有抓取数据 ``` curl 'http://安装snmp_exporter的机器的IP:9116/snmp?target=被监控交换机IP' ``` ### 四:对接 prometheus 主服务器 修改 prometheus 主目录下文件 prometheus.yml (配置这东西花了非常多的时间,当时遇到的一些坑难以表述,现在看来倒是挺简单的,也许这就是进步?) **前提**: 主配置文件 prometheus.yml 属于yaml 格式,不识别 tab 缩进,只认 空格 ,而且以不同的对齐代表不同的归属层级,具体可参考 [YAML语言教程-阮一峰](http://www.ruanyifeng.com/blog/2016/07/yaml.html) 需要将各个节点和 prometheus 对接起来,只需要修改 scrape_configs: 这一段配置文件;这一段又分为两种模式,静态发现和动态发现,具体配置如下 ``` scrape_configs: #<scrape_config>区域指定了目标列表和目标下的配置参数, 这些配置参数描述了如何抓取度量指标数据。 #一个scrape_config可以指定多个job,每个job下有多个targets (yaml格式只能一行一行的注释) - job_name: 'prometheus' #job_name 的值必须唯一 # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'linux1' static_configs: #配置静态发现列表 - targets: ['192.168.33.11:9100'] #括号内可添加多个 ip:port 的格式,以 , 分隔 labels: #对job打上一个标签,以便于 prometheus 的归类发现,以及更高级操作 instance: server1 - job_name: 'linux2' static_configs: - targets: ['192.168.33.12:9100'] labels: instance: server2 - job_name: 'file_ds' file_sd_configs: #以 file_sd_configs 动态发现的模式,推荐使用这种方式,可以实现热添加 - refresh_interval: 1m #指定多久扫描一次目标配置文件 files: - /data/prometheus/config/*.yaml #指定目标文件的位置(注意文件的权限问题) #以下一段为通过snmp协议监控交换机的配置,默认为snmp v2 版本 - job_name: 'snmp' static_configs: - targets: - 172.16.104.201 # 添加需要被监控交换机的ip metrics_path: snmp params: module: [if_mib] #指定使用snmp_exporter程序的 if_mib 模块 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9116 #指定 snmp_exporter监控节点的服务器位置, #这里为默认和 prometheus server 同一台主机 ``` files: /data/prometheus/config/node.yaml 配置示例: ``` - targets: - 192.168.1.2:9100 - 192.168.1.1:9182 - 192.168.177.206:9200 labels: #可以多个标签,以配合前端界面的分类 server: dev-es env: linux name: gg22 ``` prometheus 官方提供了一个非常贴心的工具,prometool 可以检查配置文件是否正确,用法:(其他用法自行开发) ``` ./promtool check config prometheus.yml ``` ### 五:对接 grafana 前端 上一篇已经实例过了,就是添加一个数据源,非常简单。 但是要注意的是,linux、windows、snmp 三种不同的类型面板是不通用的,因为查询语句不同; 我是在 grafana 官方 copy 的面板,如果愿意,自己可以从头开始构建界面,毕竟自己做的才是最适合自己的。 ### 六:参考资料 [https://love2.io/@1046102779/doc/prometheus/introductions/overview.md](https://love2.io/@1046102779/doc/prometheus/introductions/overview.md) [prometheus监控交换机-csdn](https://blog.csdn.net/YUKEKECHEN/article/details/85960248) Last modification:March 6th, 2019 at 04:49 pm © 允许规范转载