首页 > 其他分享 >【升职加薪秘籍】我在服务监控方面的实践(2)-监控组件配置

【升职加薪秘籍】我在服务监控方面的实践(2)-监控组件配置

时间:2023-12-08 19:03:33浏览次数:35  
标签:node filebeat exporter 加薪 prometheus program 监控 升职

大家好,我是蓝胖子,关于性能分析的视频和文章我也大大小小出了有一二十篇了,算是已经有了一个系列,之前的代码已经上传到 github.com/HobbyBear/performance-analyze ,接下来这段时间我将在之前内容的基础上,结合自己在公司生产上构建监控系统的经验,详细的展示如何对线上服务进行监控,内容涉及到的指标设计,软件配置,监控方案等等你都可以拿来直接复刻到你的项目里,这是一套非常适合中小企业的监控体系。

在上一节我们其实是建立起了对监控的概念,对监控什么,如何监控有了大致的印象。这一节我们就要正式开始动手实践了,这一节我会介绍下项目代码的结构以及着重介绍下其中docker-compose的配置文件。

完整代码我已经上传到了github

github.com/HobbyBear/easymonitor

为了后面章节的介绍更加清晰,我在这一节还是介绍下整个项目各个目录以及含义

(base) ➜  easymonitor git:(main) ✗ tree -L 1
.
├── ReadMe.md
├── build.sh // 对webhookserver 以及 webapp 项目进行编译 ,然后放到program文件夹里
├── docker-compose.yaml // 启动各个监控系统组件
├── filebeat.yml // filebeat日志采集的配置文件
├── go.mod
├── go.sum
├── grafanadashbord // 放置grafana的监控面板导出的json文件,可直接启动项目,然后导入json文件,即可构建监控面板
├── infra // 项目基础组件的代码,因为服务的监控有时会涉及到埋点和prometheus client暴露指标,将这部分逻辑都写在这个包下,后续新应用只要引入这个包就能拥有这些监控指标
├── logconf // 放置主机上的日志采集配置文件,filebeat.yml 中会引入这个文件夹下的配置规则做不同的采集策略
├── logs // 放置应用服务日志的目录,由于是docker-compose启动,需要将主机这个目录同时映射到filebeat和应用服务容器,filebeat会对这个目录下的日志进行采集
├── logstash.conf // logstash 配置文件
├── program // 放置webhookserver 以及 webapp 项目编译好的二进制文件
├── prometheus.yml // prometheus 配置文件
├── webapp // 应用服务代码
└── alerterserver // 模拟自研报警系统代码

由于机器有限,我准备用docker-compose来构建我们需要用到的监控组件以及应用服务。回顾下监控架构图。

image.png

我们需要的组件或者服务有,应用服务(在项目代码里是webapp),filebeat,prometheus,logstash,elasticsearch,kibana, grafana,node exporter , 自研的报警服务(在项目代码里是alerterserver)

可以看到,在实际的生产环境中,应用服务和filebeat,node exporter是在同一台主机上,共享了linux命名空间,直接用docker-compose 启动各个组件不好模拟这种情况,所以为了更加真实的模拟,我对node exporter 启动容器的配置做了简单修改,让项目代码里的logs目录同时映射到filebeat容器和node exporter容器内部,并且让应用程序代码在node exporter容器里启动,这样filebeat从logs目录采集到的日志就是应用程序webapp打的日志了

为了让node exporter 容器镜像启动时也会运行webapp程序,我修改了其启动容器时的entrypoint配置,因为node exporter本来的entrypoint是要去运行node exporter进程的,现在修改为要运行一个脚本。

version: "3.7"  
services:  
  mynode:  
    image: prom/node-exporter:latest  
    container_name: "node0"  
    hostname: "mynode"  
    ports:  
      - "9100:9100"  
      - "8080:8080"  
      - "8090:8090"  
    volumes:  
      - "./program:/program"  
      - "./logs:/logs"  
    restart: always  
    entrypoint: "sh /program/start_node_exporter.sh"  

脚本内则是将webapp和node exporter同时启动起来,脚本是放置在项目program 目录里,映射到了 容器内部。 webapp通过8090端口暴露prometheus 指标信息,通过8080端口监听http请求。9100端口是node exporter服务监听的端口。脚本内容如下:

#!/bin/bash  
nohup  /program/webapp &  
node_exporter  --collector.vmstat --collector.tcpstat --collector.processes

docker-compose 配置

完整的 docker-compose 配置文件如下:

version: "3.7"  
services:  
  mynode:  
    image: prom/node-exporter:latest  
    container_name: "node0"  
    hostname: "mynode"  
    ports:  
      - "9100:9100"  
      - "8080:8080"  
      - "8090:8090"  
    volumes:  
      - "./program:/program"  
      - "./logs:/logs"  
    restart: always  
    entrypoint: "sh /program/start_node_exporter.sh"  
  
  
  prometheus:  
    image: prom/prometheus:latest  
    container_name: "prometheus0"  
    restart: always  
    ports:  
      - "9090:9090"  
    volumes:  
      - "./prometheus.yml:/etc/prometheus/prometheus.yml"  
  grafana:  
    image: grafana/grafana  
    container_name: "grafana0"  
    ports:  
      - "3000:3000"  
    restart: always  
  elasticsearch:  
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.2  
    container_name: elasticsearch  
    environment:  
      - discovery.type=single-node  
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"  
    ports:  
      - "9200:9200"  
  kibana:  
    image: docker.elastic.co/kibana/kibana:7.14.2  
    container_name: kibana  
    ports:  
      - "5601:5601"  
    environment:  
      ELASTICSEARCH_URL: http://elasticsearch:9200  
  filebeat:  
    image: docker.elastic.co/beats/filebeat:7.14.2  
    container_name: filebeat  
    user: root  
    volumes:  
      - ./logs:/logs  
      - ./logconf:/logconf  
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml  
    command: filebeat -e -d "*"  
    depends_on:  
      - elasticsearch  
      - logstash  
  
  logstash:  
    image: docker.elastic.co/logstash/logstash:7.14.2  
    volumes:  
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf  
    ports:  
      - "5044:5044"  
    depends_on:  
      - elasticsearch  
    mem_reservation: 1000M  
    cpu_count: 1  
  ubuntu:  
    image: ubuntu  
    command: ./alerterserver 
    ports:  
      - "16060:16060"  
    volumes:  
      - "./program:/program"  
    working_dir: /program  
  mydb:  
    restart: always  
    image: amd64/mysql:latest  
    container_name: mydb  
    environment:  
      - "MYSQL_ROOT_PASSWORD=1234567"  
      - "MYSQL_DATABASE=test"  
    ports:  
      - "3306:3306"

需要注意的是其中卷映射的配置,我们挨个来看下映射了哪些配置文件。

首先是prometheus 将项目代码里的prometheus.yml 映射到prometheus容器内部,prometheus.yml 里面配置要采集的对象,如下所示,我们需要对主机以及应用服务进行指标采集。

## prometheus.yml
global:  
  scrape_interval:     15s # 默认抓取周期  
scrape_configs:  
  - job_name: 'normal'  ## 对node exporter 进行采集
    scrape_interval: 5s  
    metrics_path: /metrics  
    static_configs:  
      - targets: ['mynode:9100']  
  
  - job_name: 'webapp'  ## 对应用服务指标进行采集
    scrape_interval: 5s  
    metrics_path: /metrics  
    static_configs:  
      - targets: [ 'mynode:8090' ]  
    relabel_configs:  
      - source_labels: [ __address__ ]  
        target_label: instance  
        regex: (.*):\d+  
        replacement: $1

然后是filebeat,映射了3个卷,分别是项目代码里的logs目录,这个目录是filebeat的采集日志目录,filebeat配置的采集规则将从这个目录采集日志。配置的规则放到了logconf目录下,以下是配置规则文件示例:

##  logconf/api.yml
- type: log  
  tail_files: true   // 该配置为true,为了让filebeat启动的时候对新增的日志才进行采集,对历史日志不进行采集
  paths:  
    - /logs/**.log  
  fields:  
    log_type: project1

除此以外,filebeat还将项目代码里的filebeat.yml 配置文件映射到了filebeat容器内。

接着是logstash 容器配置,它映射了项目代码里的logstash 配置文件,这个文件主要是定义了一些日志清洗规则,已经定义日志的输入来源和输出来源,在这个系统里,输入来源就是filebeat,输出来源就是elasticsearch。

然后是ubuntu这个容器,映射了项目代码里的program 目录,program这个目录下放置了alerterserver报警服务的二进制程序,ubuntu容器就是前台启动这个程序,16060端口就是报警服务监听的端口。

启动监控系统

通过下面两个命令,我们就可以启动整个监控系统

(base) ➜  easymonitor git:(main) ✗ sh build.sh
(base) ➜  easymonitor git:(main) ✗ docker-compose up

配置数据源

接着,服务启动之后,在浏览器输入 localhost:3000就可以 访问grafana的界面了,默认账号和密码都是admin,点击左边菜单栏选择Data sources 。

2181688956424_.pic.jpg

注意prometheus的的ip地址要换成你本地机器局域的ip,因为docker-compose启动的每个容器拥有各自的网络命名空间,要访问其他容器的进程,就得用容器的ip+端口,不过我们本地机器映射了相同端口且容器和本地机器是互通的,所以ip地址填成本地机器局域网ip即可。

你也可以用prometheus关键字替换ip地址,变成http://prometheus:9090 ,因为docker-compose启动的进程默认可以用配置文件中的容器名代替ip地址进行访问。

配置好数据源以后,就可以正式对系统进行监控了,正如前一节【升职加薪秘籍】我在服务监控方面的实践(1)-监控蓝图 所说,监控是分级的,所以我们建立监控系统指标时,也是这样,在下一节,我会首先介绍如何在操作系统,服务器层面建立起系统的监控,并定制一个自己的dash board。

在万千人海中,相遇就是缘分,为了这份缘分,给作者点个赞

标签:node,filebeat,exporter,加薪,prometheus,program,监控,升职
From: https://blog.51cto.com/u_13430169/8741200

相关文章

  • 电子眼+无人机构建平安城市视频防控监控方案
    电子眼(也称为监控摄像机)可以通过安装在城市的不同角落,实时监控城市的各个地方。它们可以用于监测交通违法行为、监控公共场所的安全以及实时监测特定区域的活动情况。通过电子眼的应用,可以帮助警方及时发现并响应各类安全事件。无人机可以在城市中进行低空飞行,具有灵活性和便携......
  • 无人机高空巡查+智能视频监控技术,打造森林防火智慧方案
    随着冬季的到来,森林防火的警钟再次敲响,由于森林面积广袤,地形复杂,且人员稀少,一旦发生火灾,人员无法及时发现,稍有疏忽就会酿成不可挽救的大祸。无人机高空巡查+智能视频监控是一种非常有效的森林防火智慧方案。通过结合无人机技术和智能视频监控系统,可以实现对森林进行全面、及时的监......
  • 安防监控市场发展6大趋势及LiteCVR视频监控技术应用方案
    随着市场安防需求的增加,安防监控市场的发展也呈现出以下几个趋势:1)无人值守、智能化。随着人工智能技术的发展,安防监控设备不仅可以对场所进行实时监控,还可以通过图像识别、语音识别等技术实现智能化管理。LiteCVR平台通过接入和利用AI识别技术,可以实现人脸识别、人脸检测、区域......
  • TSINGSEE青犀智能商场远程视频监控方案,助力商场统一智能化监管
    随着经济的发展和人们物质生活的提高,商场的普及度也越来越高,而商场一般都有占地面积大、人流量多、人员复杂的特点,商场的统一化管理也是一个大问题。智能商场远程视频监控通过利用物联网和云计算技术,可以用来实现远程统一化视频监管能力,具体表现在以下几个方面。1、视频监控系统:首......
  • zabbix使用自定义监控项权限不足
    一、背景zabbix在配置好个人监控项后,最开始基本上都会遇到权限不足的问题。二、解决方法两种解决方法:1、配置sudoers,然后再key值执行命令前加sudo(相对来说比较麻烦)2、配置zabbix_agent#zabbix-agent配置echo"AllowRoot=1">>/etc/zabbix/zabbix_agentd.conffind/-na......
  • 海康监控无画面,更换水晶头 ——it专员实习生日志(2023)
    海康监控无画面,更换水晶头——it专员实习生日志(2023.12.7)导航目录海康监控无画面,更换水晶头——it专员实习生日志(2023.12.7)导航遇到的困难/问题描述解决的经过与思路第一天第二天造成的原因解决方案遇到的困难/问题描述监控没有画面,黑屏解决的经过与思路第一天领......
  • 如何搭建一套完整的智能安防视频监控平台?关于设备与软件选型的几点建议
    安防视频监控系统主要由前端摄像机设备、视频显示设备、视频存储设备、安防应用软件/平台以及其它传输、辅助类设备组成。一般来说,安防监控系统具有可扩展和开放性,以方便未来的扩展和与其他系统的集成。今天我们就来介绍一下,搭建一套完整的安防监控平台,应该如何选型?1、前端监控设......
  • 2024年安防行业预测:5G与安防视频监控技术的5大关键趋势
    5G技术是一项以前所未有的速度和可靠性提供数据传输的技术,它的出现将极大地促进安防视频监控技术的发展。随着5G技术的快速发展,安防视频监控系统将在多个方面迎来显著的改进和创新。伴随着2023年进入尾声,2024即将到来,那么在2024年,5G技术与安防视频监控技术又将迎来怎样的发展趋势......
  • 2024年安防视频监控发展趋势预测及LiteCVR视频技术应用
    随着科技的快速发展,安防视频技术已经成为了各个领域中不可或缺的一部分。为了更好地应对各种安全挑战,安防视频技术也在不断地升级和改进。本文将预测2024年安防视频技术的几个发展趋势。首先,高清化将是未来安防视频技术的一个重要方向。随着人们对安全需求的不断提高,对视频清晰度......
  • 浅析AI智能视频监控技术在城市交通中的作用及意义
    城市交通作为整个城市的整体脉络,每天都发挥着重要作用,为了最大程度地避免城市交通堵塞、提高城市交通效率,智能视频监控系统发挥了重要作用。具体表现在以下几个方面:1、交通违规监管:TSINGSEE青犀智能视频监控系统可以通过视频监控、车辆检测等技术来监管城市交通违规行为,如道路违......