草庐IT

prometheus+ Grafana监控全家桶

马鹏飞 2023-03-28 原文
在调研监控工具,之前一直用的zabbix很平稳(从没出过问题),监控内容大概有系统级别的cpu、内存、硬盘之类的, 也有服务的运行情况、elasticsearch、hive、kafka的lag等等,但有几个问题没法解决:

1、zabbix没法监控flink(虽然可以通过api调用方式,但flink指标有几百个一个一个加,并且zabbix机制为一个一个指标取的,极其麻烦和低效) 2、jvm级别的es、spring、kafka等运行情况不好获取 3、取kafka数据时,我们有n多topic对应又有n多groupid来消费,如果要取一遍所有信息,zabbix也是只能一个一个取(当然后边发现有模板的方式也可以,但如果增加一个也要手动加) 详细对比可以参考网上文章,说的很详细 http://dockone.io/article/10437 我理了下对于我们这种纯java+大数据场景,并且设备一般都在客户环境不能上网,随时会断电,情况下的优劣势
监控工具 优势 劣势
zabbix 稳定、进程少(一个server+agent搞定、文档齐全、所有操作界面都可以配、支持action动作触发(这个很重要) 对于docker、flink、hive等动态运行的场景支持不好(也可以自定义脚本搞定)
prometheus 部署简单、社区插件比较多(各种exporter),比较多的官方直接支持 每增加一个组件的监控就需要一个exporter独立进程、预警action等页面不可配(本身页面功能特简陋)


放个普罗米修斯的架构图 其中: Prometheus Server: 用数据的采集和存储,PromQL查询,报警配置。 Push gateway: 用于批量,短期的监控数据的汇报总节点。 Exporters: 各种汇报数据的exporter,例如汇报机器数据的node_exporter,汇报MondogDB信息的 MongoDB_exporter 等等。 Alertmanager: 用于高级通知管理。 采集数据的主要流程如下: 1. Prometheus server 定期从静态配置的主机或服务发现的 targets 拉取数据(zookeeper,consul,DNS SRV Lookup等方式) 2. 当新拉取的数据大于配置内存缓存区的时候,Prometheus会将数据持久化到磁盘,也可以远程持久化到云端。 3. Prometheus通过PromQL、API、Console和其他可视化组件如Grafana、Promdash展示数据。 4. Prometheus 可以配置rules,然后定时查询数据,当条件触发的时候,会将告警推送到配置的Alertmanager。 5. Alertmanager收到告警的时候,会根据配置,聚合,去重,降噪,最后发出警告。

开始prometheus安装

他本身是用go写的,所以需要安装个go环境,

安装go:

yum install epel-release

yum install golang

安装普罗米修斯

下载 https://github.com/prometheus/prometheus/releases/tag/v2.26.0 tar zxvf prometheus-2.26.0.linux-amd64.tar.gz && cd prometheus-2.26.0.linux-amd64 ./prometheus --config.file=prometheus.yml

安装grafana

vim /etc/yum.repos.d/grafana.repo [grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt 开始安装: yum install grafana -y systemctl start grafana-server systemctl enable grafana-server 这时候应该能访问grafana页面了: http://ip:3000 用户名密码 admin/admin 然后导入prometheus数据源

安装node_exporter

下载: https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz && cd node_exporter-1.1.2.linux-amd64 ./node_exporter # 启动node_exporter,默认是9100端口 修改普罗米修斯配置文件加入node_exporter数据获取

先关掉prometheus进程 ,修改 prometheus.yml ,在后边增加如下配置: - job_name: 'node_exporter_local' static_configs: - targets: ['127.0.0.1:9100'] 修改完之后重新执行 ./prometheus --config.file=prometheus.yml

grafana 导入系统监控图

到grafana网站找到最新的一个node exporter图,点进去,可以看到get this dashboard的id,然后导入,数据源选择prometheus就可以看到效果了

https://grafana.com/grafana/dashboards/8919

增加es监控

[https://github.com/justwatchcom/elasticsearch_exporter](https://github.com/justwatchcom/elasticsearch_exporter) tar zxvf elasticsearch_exporter-1.1.0.linux-amd64.tar.gz cd elasticsearch_exporter-1.1.0.linux-amd64 # 启动es_exporter 默认监听端口为9114 ./elasticsearch_exporter --es.uri="https://用户名:密码@10.0.81.101:9200" --es.ssl-skip-verify 再修改prometheus.yml 增加如下配置: - job_name: 'es监控' static_configs: - targets: ['127.0.0.1:9114'] 重新执行: ./prometheus --config.file=prometheus.yml

在grafana中导入elasticsearch监控模板: https://github.com/justwatchcom/elasticsearch_exporter/blob/master/examples/grafana/dashboard.json

导入选择json格式即可

增加kafka监控

下载: [https://github.com/danielqsj/kafka_exporter/releases](https://github.com/danielqsj/kafka_exporter/releases) tar zxvf kafka_exporter-1.3.0.tar.gz cd kafka_exporter-1.3.0 #作者最新版忘了把编译后的文件放进去,所以需要先执行编译 go build # 生成一个kafka_exporter的可执行文件 ./kafka_exporter --tls.enabled --tls.ca-file="/etc/ca-cert" --tls.cert-file="/etc/kafka.client.pem" --tls.key-file="/etc/kafka.client.key" --tls.insecure-skip-tls-verify --kafka.server=10.0.81.22:9091 --log.level="debug" 修改 prometheus.yml 增加以下内容,还是一样 重新执行: ./prometheus --config.file=prometheus.yml - job_name: 'kafka监控' static_configs: - targets: ['127.0.0.1:9308'] grafana导入kafka模板: id为7589

监控flink

我这里用的是flink1.12.0 安装在/opt/目录下 flink在发布时自带了prometheus的jar包,先复制prometheus的jar包到flink的lib目录下 cp /opt/flink-1.12.0/plugins/metrics-prometheus/flink-metrics-prometheus-1.12.0.jar /opt/flink-1.12.0/lib/ 修改配置增加监控数据:/opt/flink-1.12.0/conf/flink-conf.yaml metrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter metrics.reporter.promgateway.host: 127.0.0.1 metrics.reporter.promgateway.port: 9091 metrics.reporter.promgateway.jobName: myJob metrics.reporter.promgateway.randomJobNameSuffix: true metrics.reporter.promgateway.deleteOnShutdown: false 修改完成之后重启flink,确保任务都正常运行 修改 prometheus.yml 增加以下内容,还是一样 重新执行: ./prometheus --config.file=prometheus.yml - job_name: 'flink监控' static_configs: - targets: ['127.0.0.1:9091'] grafana导入模板: https://grafana.com/grafana/dashboards?search=flink 安装pushgateway: https://github.com/prometheus/pushgateway/releases/tag/v1.4.0 wget https://github.com/prometheus/pushgateway/releases/download/v1.4.0/pushgateway-1.4.0.linux-amd64.tar.gz tar zxvf pushgateway-1.4.0.linux-amd64.tar.gz cd pushgateway-1.4.0.linux-amd64 ./pushgateway

有关prometheus+ Grafana监控全家桶的更多相关文章

  1. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  2. ruby-on-rails - 监控多个 Rails 应用程序 - 2

    是否可以在我的服务器上运行任何工具来监控多个Rails应用程序?我需要监控每个应用程序收到的请求数、每个应用程序使用了多少内存、使用了多少CPU以及其他类似的统计信息。我需要查看每个单独的Rails应用程序的统计信息。 最佳答案 我建议你试试NewRelicRPM.免费版:RPMLiteisthemostwidelyusedsolutionforbasicwebapplicationmonitoring.RPMLiteprovidesapplicationmonitoringforunlimitedJava,RubyorJRubya

  3. ruby-on-rails - 监控 RTMP 流,如果可用则记录 - 2

    我正在寻找一种方法来监视流上的事件,以便我可以确定是否有任何内容通过流。如果有,我将开始使用rtmpdump进行录制。我想象这是通过运行一个每60秒检查一次流的cron任务来实现的。如果它确定流正在通过,则调用rtmpdump开始记录它。如果没有,则什么都不做,并在60秒后再次检查。由于rtmpdump只是在没有流数据时出现错误,因此尝试使用它来监视流似乎不是一个好主意,但也许我错了。如果我在逐个案例的基础上手动执行此操作会很容易,但我正在尝试自动执行自动录制流的任务(如果它们可用)。有没有人遇到过这样做的方法?也许我可以在命令行(linux)中使用其他一些工具?如果有帮助,我正在使用

  4. ruby - 如何在 Node.js/RoR 中监控 20 个网站(Ping 或 HTTP)的正常运行时间 - 2

    每5分钟(例如)ping20个网站的列表以了解该网站是否响应HTTP202的最佳方法是什么?最简单的想法是将20个URLS保存在数据库中,然后运行数据库并对每个URL执行ping操作。但是,当一个人不回答时会发生什么?之后的人会怎样?此外,是否有更好但更简单的解决方案?恐怕该列表会增长到20000个网站,然后没有足够的时间在我需要ping的5分钟内全部ping通它们。基本上,我是在描述PingDom、UptimeRobot等的工作原理。我正在使用node.js和RubyonRails构建这个系统。我也倾向于使用MongoDB来保存所有ping和监控结果的历史记录。建议?非常感谢!

  5. ruby-on-rails - Rails 中的用户监控 - 2

    我们有一个带有广泛管理部分的应用程序。我们对功能有点满意(就像您一样),并且正在寻找一些快速简便的方法来监控“谁使用什么”。理想情况下,一个简单的gem将允许我们在每个用户的基础上跟踪Controller/操作,以构建使用的功能和未使用的功能的图片。任何你会推荐的..谢谢主场 最佳答案 我不知道有什么流行的gem或插件可以解决这个问题;过去,我在ApplicationController中将这种审计实现为before_filter:从内存中:classApplicationControllercurrent_user,:contro

  6. ruby - 使用 Monit 监控 ruby​​ 进程 - 2

    我有一堆长时间运行的Ruby脚本,我想确保每30秒左右运行一次。我通常通过简单地启动命令rubyscript-name.rb我如何配置monit来管理这些脚本?更新:我试着关注thismethodtocreateawrapperscript然后它会启动ruby​​进程,但它似乎没有创建.pid文件并且键入“./wrapper-scriptstop”什么也没做:/我应该在ruby​​中编写pid还是使用包装脚本来创建monit所需的pid? 最佳答案 MonitWiki有很多配置示例:http://mmonit.com/wiki/Mo

  7. ruby-on-rails - Rails 上持续的第三方 API 监控和测试 - 2

    我们想设置自动化作业(通过Jenkins)以在第三方API出现故障或他们部署了不兼容的API时发出警报。我说的是针对真实的HTTPAPI进行测试,而不是模拟,但是因为我们已经使用rspec编写了模拟,所以我不确定我们是否应该通过编写两个独立的睾丸来重复这项工作。有人有这方面的经验吗?(如果其他工具可以提供帮助,我不限于Ruby/Rspec) 最佳答案 你看过VCR了吗??使用它,您可以“记录您的测试套件的HTTP交互并在未来的测试运行期间重播它们以进行快速、确定性、准确的测试”。在测试来自外部API的预期响应时,我将它与RSpec一

  8. ruby-on-rails - 监控 Sidekiq 作业完成情况的最佳方式? - 2

    我正在使用Sidekiqworker在用户首次登录后完成对Facebook的一些请求。通常该任务大约需要20秒左右。我想在同步完成后立即使用ajax请求将一些信息加载到页面上,但不确定使用Javascript检查作业完成情况的最佳方式。一种可能性是配置Sidekiqworker在完成其余工作后设置cookie。然后我可以使用setTimeout函数在调用加载函数之前继续检查cookie。但我不确定这是否是最好的方法。我可以改用Redis吗? 最佳答案 Paul,最初你必须看一下这个PubSubonRailstutorial!当异步事

  9. ruby-on-rails - God vs. Monit 用于过程监控 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion使用哪个进行过程监控?为什么?

  10. ruby-on-rails - 如何用monit监控delayed_job - 2

    网络上是否有关于如何使用Monit监控delayed_job的示例??我能找到的所有东西都使用God,但我拒绝使用上帝,因为在Ruby中长时间运行的进程通常很糟糕。(上帝邮件列表中的最新帖子?GodMemoryUsageGrowsSteadily。)更新:delayed_job现在带有samplemonitconfig基于这个问题。 最佳答案 下面是我如何让它工作的。使用collectiveideaforkofdelayed_job除了积极维护之外,这个版本还有一个不错的script/delayed_job可以与monit一起使用的

随机推荐