新型监控告警工具prometheus(普罗米修斯)的入门使用(附视频讲解)(2)

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

# 时间范围截取,Range Vector Selectors
http_requests_total{job="prometheus"}[5m]

# 时间偏移
http_requests_total offset 5m

# 时间段内数值累加
sum(http_requests_total{method="GET"} offset 5m) 

还可以进行多元运算:Operators,以及使用函数:Functions

prometheus的告警规则配置

alert rules在单独的文件中定义,然后在prometheus.yml中引用:

rule_files:
  - "first_rules.yml"
  # - "second_rules.yml"

rules文件格式如下:

$ cat first_rules.yml
groups:
- name: rule1-http_requst_total
  rules:
  - alert:  HTTP_REQUEST_TOTAL
    expr: http_requests_total > 100
    for: 1m
    labels:
      severity: page
    annotations:
      summary: Http request total reach limit

需要注意,还要在prometheus.yml中配置alertmanager的地址:

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 127.0.0.1:9093

重新加载配置文件后,可以在prometheus的rule页面看到告警规则,在alert页面看到触发的告警,

现在alertmanager还没有部署,在下一节部署了alertmanager之后,告警可以在alertmanager中看到。

alertmanager

alertmanager是用来接收prometheus发出的告警,然后按照配置文件的要求,将告警用对应的方式发送出去。

将告警集中到alertmanager,可以对告警进行更细致的管理。

部署启动
wget https://github.com/prometheus/alertmanager/releases/download/v0.15.2/alertmanager-0.15.2.linux-amd64.tar.gz
tar -xvf alertmanager-0.15.2.linux-amd64.tar.gz

解压以后会得到下面这些文件:

alertmanager  alertmanager.yml  amtool  LICENSE  NOTICE

直接运行alertmanager就可以启动,然后通过http://IP地址:9093/#/alerts可以打开alertmanager的页面。

alertmanager的配置文件

alertmanager的配置文件格式如下:

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'web.hook'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

其中最主要的是receivers,它定义了告警的处理方式,这里是webhook_config,意思是alertmananger将告警转发到这个url。

alertmanager configuration提供多种告警处理方式,webhook_configs只是其中一种:

email_config
hipchat_config
pagerduty_config
pushover_config
slack_config
opsgenie_config
victorops_config
webhook_config
wechat_config 

alertmanager配置邮件通知

这里给出一个用邮件通知告警的例子,发件邮箱用的是网易邮箱:

global:
  resolve_timeout: 5m
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'mail'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
- name: 'mail'
  email_configs:
  - to: 接收告警用的邮箱 
    from: 你的发件用的网易邮箱
    smarthost:  smtp.163.com:25
    auth_username: 网易邮箱账号
    auth_password: 网易邮箱密码
    # auth_secret:
    # auth_identity:
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

注意这里有web.hookmail两个reciver,使用哪个receive是在上面的router中配置的:

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'mail'

重新加载配置后,就可以收到告警邮件了。

alertmanager集群模式

alertmanager可以配置成集群模式,即多个alaertmanager一起运行,彼此之间通过gossip协议获知告警的处理状态,防止告警重复发出。

这种模式通常用在prometheus需要做高可用的场景中。

prometheus ha deploy的高可用部署通常至少会有两套prometheus独立工作,它们会执行各自的告警检查。

与之相伴的通常也要部署多个alaertmanager,这时候这些alertmanager之间就需要同步信息,防止告警重复发出。

由于使用的是gossip协议,alermanager的集群模式配置很简单,只需要启动时指定另一个或多个alertmanager的地址即可:

--cluster.peer=192.168.88.10:9094

*_exporter

exporter是一组程序,它们分别被用来采集物理机、中间件的信息。有prometheus官方实现的,还有更多第三方实现的:

Databases
    Aerospike exporter
    ClickHouse exporter
    Consul exporter (official)
    CouchDB exporter
    ElasticSearch exporter
    EventStore exporter
...
Hardware related
    apcupsd exporter
    Collins exporter
    IoT Edison exporter
...
Messaging systems
    Beanstalkd exporter
    Gearman exporter
    Kafka exporter
...
Storage

    Ceph exporter
    Ceph RADOSGW exporter
...
HTTP

    Apache exporter
    HAProxy exporter (official)
...
APIs
    AWS ECS exporter
    AWS Health exporter
    AWS SQS exporter
Logging

    Fluentd exporter
    Google's mtail log data extractor
...
Other monitoring systems
    Akamai Cloudmonitor exporter
    AWS CloudWatch exporter (official)
    Cloud Foundry Firehose exporter
    Collectd exporter (official)
...
Miscellaneous

    ACT Fibernet Exporter
    Bamboo exporter
    BIG-IP exporter
...

这些exporter分别采集对应系统的指标,并将其以prometheus的格式呈现出来,供prometheus采集。

blackbox_exporter

blackbox_exporter是一个用来探测url、domain等联通、响应情况的exporter。

部署启动

wegt https://github.com/prometheus/blackbox_exporter/releases/download/v0.12.0/blackbox_exporter-0.12.0.linux-amd64.tar.gz
tar -xvf blackbox_exporter-0.12.0.linux-amd64.tar.gz

解压后得到:

blackbox_exporter  blackbox.yml  LICENSE  NOTICE

直接运行,默认监听地址是:9115:

./blaxkbox_exporter

blackbox_exporter配置文件与工作原理

prometheus/blackbox_exporter是一个用来探测HTTP、HTTPS、DNS、TCP和ICMP等网络状态的工具。

在blockbox_exporter中配置的一个个工作模块,prometheus/blackbox_exporter config

配置文件如下:

$ cat blackbox.yml
modules:
  http_2xx:
    prober: http
    http:
  http_post_2xx:
    prober: http
    http:
      method: POST
  tcp_connect:
    prober: tcp
  pop3s_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false
  ssh_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^SSH-2.0-"
  irc_banner:
    prober: tcp
    tcp:
      query_response:
      - send: "NICK prober"
      - send: "USER prober prober prober :prober"
      - expect: "PING :([^ ]+)"
        send: "PONG ${1}"
      - expect: "^:[^ ]+ 001"
  icmp:
    prober: icmp

例如下面的配置中,有两个工作模块http_2xxhttp_post_2xx

modules:
  http_2xx:
    prober: http
    http:
  http_post_2xx:
    prober: http
    timeout: 5s
    http:
      method: POST
      headers:
        Content-Type: application/json
    body: '{}'

模块可以根据需要设置更多的参数和判断条件:

http_2xx_example:
  prober: http
  timeout: 5s
  http:
    valid_http_versions: ["HTTP/1.1", "HTTP/2"]
    valid_status_codes: []  # Defaults to 2xx
    method: GET
    headers:
      Host: vhost.example.com
      Accept-Language: en-US
    no_follow_redirects: false
    fail_if_ssl: false
    fail_if_not_ssl: false
    fail_if_matches_regexp:
      - "Could not connect to database"
    fail_if_not_matches_regexp:
      - "Download the latest version here"
    tls_config:
      insecure_skip_verify: false
    preferred_ip_protocol: "ip4" # defaults to "ip6"

通过blackbox_exporter的服务地址调用这些模块,并传入参数。

例如要获取域名www.baidu.com的指标,要用http_2xx模块,传入参数 http://www.baidu.com :

http://192.168.88.10:9115/probe?module=http_2xx&target=http%3A%2F%2Fwww.baidu.com%2F

blackbox_exporter将按照http_2xx中的配置探测目标网址http://www.baidu.com, 并返回探测到的指标:

# HELP probe_dns_lookup_time_seconds Returns the time taken for probe dns lookup in seconds
...<省略>....
probe_http_version 1.1
# HELP probe_ip_protocol Specifies whether probe ip protocol is IP4 or IP6
# TYPE probe_ip_protocol gauge
probe_ip_protocol 4
# HELP probe_success Displays whether or not the probe was a success
# TYPE probe_success gauge
probe_success 1

通过这种方式,prometheus就可以采集到域名、dns、ip等虚拟资源的指标。

可以借助relabel_configs将__address__替换为blackbox_exporter的地址,使带有指定参数的blackbox_exporter的url成为prometheus的监控目标。

示例:监测kubernetes的集群node的ping的情况

在blackbox的配置文件中配置icmp模块:

  icmp:
    prober: icmp

在prometheus.yml中配置服务发现,将__address__改写为blackbox_exporter的地址,并带上相关参数:

  - job_name: 'kubernetes-nodes-ping'
    kubernetes_sd_configs:
    - role: node
      api_server: https://192.168.88.10
      tls_config:
        ca_file:   /opt/app/k8s/admin/cert/ca/ca.pem
        cert_file: /opt/app/k8s/admin/cert/apiserver-client/cert.pem
        key_file:  /opt/app/k8s/admin/cert/apiserver-client/key.pem
    bearer_token_file: /opt/app/k8s/apiserver/cert/token.csv
    scheme: http
    metrics_path: /probe
    params:
      module: [icmp]
    relabel_configs:
    - source_labels: [__address__]
      regex: (.+):(.+)
      replacement: ${1}
      target_label: __param_target
    - target_label: __address__
      replacement: 192.168.88.10:9115
    - action: labelmap
      regex: __meta_kubernetes_node_label_(.+)

重新加载配置后,就可以在prometheus的页面中可以看到新增的target,而它们的地址是blackbox的地址。

可以在prometheus中搜索指标probe_success:

http://10.10.199.154:9090/graph?g0.range_input=1h&g0.expr=probe_success&g0.tab=0

可以编写下面的告警规则,如果持续2分钟ping不通,触发告警:

- name: node_icmp_avaliable
  rules:
  - alert: NODE_ICMP_UNREACHABLE
    expr: probe_success{job="kubernetes-nodes-ping"} == 0
    for: 2m
    labels:
      level: 1
    annotations:
      summary: node is 

杂项

下面是学习过程中,查询的一些资料,直接罗列,没有做整理。

规则检查:

promtool check rules /etc/prometheus/alert-rules.yml
./promtool check rules alert_rule_test.yml

监测cpu:

https://stackoverflow.com/questions/49083348/cadvisor-prometheus-integration-returns-container-cpu-load-average-10s-as-0

In order to get the metric “container_cpu_load_average_10s” the cAdvisor must run with the option “–enable_load_reader=true”,

设置kubelet的参数:–enable-load-reader

container_spec_cpu_quota

cadvisro指标

alertmanager-webhook-receiver

Write a bash shell script that consumes a constant amount of RAM for a user defined time

Cadvisor metric “container_network_tcp_usage_total” always “0”

Cadvisor常用容器监控指标

prometheus-book

Relabeling is a powerful tool to dynamically rewrite the label set of a target before it gets scraped.

运算Operators

# 容器CPU负载告警
# container_cpu_load_average_10s, container_spec_cpu_quota, container_spec_cpu_shares, container_spec_cpu_quota
# 容器CPU limit: container_spec_cpu_quota / container_spec_cpu_period
# 计算空间的CPU使用率:sum(rate(container_cpu_usage_seconds_total{namespace=~".+"}[1m])) by (namespace) * 100
# 计算容器CPU使用率:sum(rate(container_cpu_usage_seconds_total{name=~".+"}[1m])) by (name) * 100
# rate(container_cpu_usage_seconds_total{name=~".+"}[1m])

计算容器的内存使用率:

container_memory_usage_bytes{container_name!="", pod_name!=""} / container_spec_memory_limit_bytes{container_name!="", pod_name!=""}

container_memory_usage_bytes{instance="prod-k8s-node-155-171",container_name!="", pod_name!=""} / container_spec_memory_limit_bytes{instance="prod-k8s-node-155-171",container_name!="", pod_name!=""}

container_memory_usage_bytes{container_name!="", pod_name!=""} / container_spec_memory_limit_bytes{container_name!="", pod_name!=""} > 0.98

container_memory_rss{container_name!="", pod_name!=""}/container_spec_memory_limit_bytes{container_name!="", pod_name!=""} >0.98

参考

  1. prometheus documents
  2. prometheus configuration
  3. prometheus download
  4. prometheus first_steps
  5. prometheus relabel_config
  6. prometheus exporters
  7. prometheus/blackbox_exporter
  8. prometheus/blackbox_exporter config
  9. Promtheus Remote Storage使用案例:多Kubernetes集群监控方案
  10. Operators
  11. Functions
  12. alerting rules
  13. alertmanager configuration
  14. prometheus ha deploy
  15. prometheus exporter

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

4道运维工程师面试题**

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值