建设工程交易中心网站收费标准,长春站建了多少年,用nodejs可以做网站么,网站建设原本文您将了解到Prometheus 告警模块Alertmanager 配置的深度解析 Alertmanager 配置解析
Alertmanager 配置可以用命令行配置#xff0c;也可以通过配置文件配置。命令行用来配置不可变的系统参数#xff0c;配置文件用来定义限制规则用于通知路由和通知接收者。
Alertmana… 本文您将了解到Prometheus 告警模块Alertmanager 配置的深度解析 Alertmanager 配置解析
Alertmanager 配置可以用命令行配置也可以通过配置文件配置。命令行用来配置不可变的系统参数配置文件用来定义限制规则用于通知路由和通知接收者。
Alertmanager 命令
命令配置详见上文《Prometheus 告警模块介绍》
Alertmanager 配置文件
Alertmanager 配置文件通过./alertmanager --config.filealertmanager.yml命令配置配置文件由全局配置、路由配置、HTTP配置等各部分组成下面解释各个配置文件的含义。
全局配置
global:# SMTP发件人配置[ smtp_from: tmpl_string ]# 默认SMTP主机地址和端口# 端口通常为25对于TLS协议的SMTP端口通常是587比如 smtp.example.org:587[ smtp_smarthost: string ]# SMTP服务默认主机名比如163邮箱填163.com[ smtp_hello: string | default localhost ]# SMTP 认证用户名[ smtp_auth_username: string ]# SMTP 认证密码[ smtp_auth_password: secret ]# 从文件读取 SMTP 认证密码[ smtp_auth_password_file: string ]# SMTP 认证标记[ smtp_auth_identity: string ]# SMTP 认证秘钥[ smtp_auth_secret: secret ]# 默认为 SMTP TLS# GO 不支持未加密的SMTP 连接[ smtp_require_tls: bool | default true ]# Slack 通知的api url[ slack_api_url: secret ]# Slack 通知的api url 所在文件地址[ slack_api_url_file: filepath ][ victorops_api_key: secret ][ victorops_api_key_file: filepath ][ victorops_api_url: string | default https://alert.victorops.com/integrations/generic/20131114/alert/ ][ pagerduty_url: string | default https://events.pagerduty.com/v2/enqueue ][ opsgenie_api_key: secret ][ opsgenie_api_key_file: filepath ][ opsgenie_api_url: string | default https://api.opsgenie.com/ ]#微信配置[ wechat_api_url: string | default https://qyapi.weixin.qq.com/cgi-bin/ ][ wechat_api_secret: secret ][ wechat_api_corp_id: string ][ telegram_api_url: string | default https://api.telegram.org ][ webex_api_url: string | default https://webexapis.com/v1/messages ]# HTTP 客户端配置[ http_config: http_config ]#ResolveTimeout 用于警报没有EndsAt时间时使用的默认值如果经过这段时间后警报还未更新则视其为已解决#对Prometheus没影响因为其始终会包含EndsAt值[ resolve_timeout: duration | default 5m ]#读取自定义通知模板的文件列表最后一个可用使用通配符比如 templates/*.tmpl.
templates:[ - filepath ... ]# 路由树配置节点
route: route# 通知接收者配置节点
receivers:- receiver ...# 抑制规则配置节点
inhibit_rules:[ - inhibit_rule ... ]# 已过期使用time_intervals
mute_time_intervals:[ - mute_time_interval ... ]# 静音和激活路由的时间间隔列表
time_intervals:[ - time_interval ... ]route
route 路由配置节点用来配置根路由或子路由如果未配置可选参数将从父节点继承。 每个警报都会从根路由进入遍历所有子路由如果与路由匹配器匹配则执行后续的子路由不匹配则停止如果没有 匹配到任何子节点则使用默认配置参数处理警报。
路由配置文件如下
[ receiver: string ]
# 用于将多个警报聚合到一个分组中。比如clusterA 和 alertnameLatencyHighFor的多个警报将批量聚合到一个分组。
# 使用...意味着完全禁用聚合按原样传递所有警报
[ group_by: [ labelname, ... ] ]# 警报是否应该继续匹配后续的兄弟节点
[ continue: boolean | default false ]# 过期使用 matchers
# 警报匹配器
match:[ labelname: labelvalue, ... ]# 已过期使用 matchers
# 正则格式的警报匹配器
match_re:[ labelname: regex, ... ]# 警报匹配器列表
matchers:[ - matcher ... ]# 最初发送分组警报通知的等待时间这样可以有足够多的时间来收集同一分组的多条警报然后一起发送
[ group_wait: duration | default 30s ]# 发送一组新的警报信息的等待时间 (通常为 5分钟或更多)
[ group_interval: duration | default 5m ]# 警报成功发送后再次发送的等待时间 (通常是3小时或更多).
[ repeat_interval: duration | default 4h ]# 路由静默时间根节点不能配置静默时间在此期间不会发送警报
mute_time_intervals:[ - string ...]# 路由激活的时间这些值必须与time_intervals中定义的名称相匹配。空值的话表示始终处于激活状态。另外根节点不能配置激活时间路由仅在激活的时候发送通知
active_time_intervals:[ - string ...]# 更多的子路由节点
routes:[ - route ... ]结合示例来说明
# 根路由如果它们未被覆盖则由子路由继承
route:receiver: default-receivergroup_wait: 30sgroup_interval: 5mrepeat_interval: 4hgroup_by: [cluster, alertname]# 未匹配的所有警报将由default-receiver处理routes:# 跟 servicemysql 或 servicecassandra 匹配的告警将由database-pager处理- receiver: database-pagergroup_wait: 10smatchers:- service~mysql|cassandra# 与teamfrontend匹配的警报由frontend-pager处理它们根据product, environment分组- receiver: frontend-pagergroup_by: [product, environment]matchers:- teamfrontend# 所有与serviceinhouse-service匹配的告警由该路由处理。该路由将在offhours和holidays期间静默由于配置了continue: true如果匹配警报将继续执行下一个路由- receiver: dev-pagermatchers:- serviceinhouse-servicemute_time_intervals:- offhours- holidayscontinue: true# 所有与serviceinhouse-service匹配的警报由该路由处理。该路由仅在offhours 和holidays 期间处理。- receiver: on-call-pagermatchers:- serviceinhouse-serviceactive_time_intervals:- offhours- holidaystime_interval
指定用于静默或激活路由的时间间隔该命名可以在路由配置中引用。
name: string
time_intervals:[ - time_interval ... ]time_interval 是具体的时间定义格式如下
- times:[ - time_range ...]weekdays:[ - weekday_range ...]days_of_month:[ - days_of_month_range ...]months:[ - month_range ...]years:[ - year_range ...]location: string这些字段都是列表。在每个非空列表中必须至少满足一个元素才能匹配该字段。如果未指定字段则任何值都将匹配该字段。对于匹配完整时间间隔的瞬间所有字段都必须匹配。一些字段支持范围和负索引详情如下。如果未指定时区则采用 UTC 时间。
time_range范围包括开始时间和结束时间以便轻松表示小时开始/结束的边界时间。例如start_time: ‘17:00’end_time: ‘24:00’ 表示在 17:00 开始并在 24:00 之前结束。 times:- start_time: HH:MMend_time: HH:MMweekday_range星期几的列表一周从星期日开始到星期六结束。应按名称指定日期例如“Sunday”。为方便起见范围也接受这种形式start_day:end_day并且两端都包含在内。例如 [monday:wednesday,saturday, sunday] days_of_month_range一个月中的数字天数列表。天数从 1 开始。也可以接受从月末开始的负值例如一月的 -1 表示一月 31 日。例如[1:5, -3:-1]延长时间超过月初或月底将导致其被限制。例如指定 [1:31]二月期间会将实际结束日期限制为 28 或 29这具体取决于闰年。包含两端。 month_range由不区分大小写的名称例如“January”或数字标识的日历月列表其中 January 1。也接受范围。例如[1:3, may:august, december]包含两端。 year_range: 年份的数字列表。范围被接受。例如[2020:2022, 2030]包含两端。 location与 IANA 时区数据库中的位置匹配的字符串。例如Australia/Sydney。该位置提供时间间隔的时区。例如一个时间间隔的位置’Australia/Sydney’包含如下内容 times:- start_time: 09:00end_time: 17:00weekdays: [monday:friday]将包括周一至周五上午 9:00 至下午 5:00 之间的任何时间使用澳大利亚悉尼当地时间。
您还可以使用Local 作为 location 来使用运行 Alertmanager服务器的本地时间或UTC使用 UTC 时间。如果未提供时区则时间间隔采用 UTC 时间。注意在 Windows 上除非您使用ZONEINFO环境变量提供自定义时区数据库否则仅支持Local 或 UTC。
inhibit_rule
当存在与另一组匹配者相匹配的警报源时inhibit_rule 规则将禁用与一组匹配器相匹配的警告。目标警报和源警报必须具有与eqaul列表中相同的标签名称和标签值。 缺失的标签跟空值标签是等同的如果源警报和目标警报缺少equal中列出的所有标签名称则将应用inhibit_rule禁用规则。 为防止警报抑制自身同时匹配规则的目标端和源端的警报不能被条件相同的警报包括自身抑制。
# 已过期: 使用target_matchers
target_match:[ labelname: labelvalue, ... ]
# 已过期使用target_matchers
target_match_re:[ labelname: regex, ... ]# 目标警报抑制要匹配的列表
target_matchers:[ - matcher ... ]# 已过期使用source_matchers
source_match:[ labelname: labelvalue, ... ]
# 已过期source_matchers
source_match_re:[ labelname: regex, ... ]# 至少有一个警报在匹配列表中才能使抑制生效
source_matchers:[ - matcher ... ]# 源警报和目标警报要具有相等的值才能使抑制生效
[ equal: [ labelname, ... ] ]http_config
HTTP客户端与服务端通信的配置
# basic_auth 和 authorization 是互斥的# 使用配置的 username 和 password 配置 Authorization 头
# password 和 password_file 是冲突的
basic_auth:[ username: string ][ password: secret ][ password_file: string ]# 可选的 Authorization 头配置
authorization:# 设置 authentication 类型[ type: string | default: Bearer ]# 设置凭证跟credentials_file 是冲突的[ credentials: secret ]# 从配置文件读取 credentials # 跟 credentials 是冲突的[ credentials_file: filename ]# 可选的 OAuth 2.0 配置
# 不能同时使用 basic_auth 或者 authorization
oauth2:[ oauth2 ]# 是否启用 HTTP2
[ enable_http2: bool | default: true ]# 可选 proxy_url
[ proxy_url: string ]# HTTP 请求是否遵循HTTP 3xx重定向
[ follow_redirects: bool | default true ]# TLS 配置
tls_config:[ tls_config ]oauth2
oauth2 配置参数
client_id: string
[ client_secret: secret ]# 从文件读取 客户端秘钥跟 client_secret 是冲突的
[ client_secret_file: filename ]# token 请求的范围
scopes:[ - string ... ]# 获取token 的 URL
token_url: string# 附加到 token URL 后面的可选参数
endpoint_params:[ string: string ... ]# 配置 token 请求的 TLS 配置
tls_config:[ tls_config ]# 可选 proxy URL
[ proxy_url: string ]tls_config
TLS 连接配置
# 验证服务器证书的CA证书
[ ca_file: filepath ]# 用于对服务器进行客户端证书身份验证的证书和密钥文件。
[ cert_file: filepath ]
[ key_file: filepath ]# ServerName 扩展用于表示服务器名称
# http://tools.ietf.org/html/rfc4366#section-3.1
[ server_name: string ]# 禁用服务器证书验证
[ insecure_skip_verify: boolean | default false]# 最小能接受的TLS版本。可接受的值TLS10 (TLS 1.0), TLS11 (TLS 1.1), TLS12 (TLS 1.2), TLS13 (TLS 1.3)
# 如果未设置Prometheus 将使用Go默认的最小版本 TLS 1.2
# 查看最小版本 https://pkg.go.dev/crypto/tls#Config
[ min_version: string ]
# 可接受的最大TLS版本。可接受的值TLS10 (TLS 1.0), TLS11 (TLS 1.1), TLS12 (TLS 1.2), TLS13 (TLS 1.3)
# 如果未设置Prometheus 将使用Go默认的最大版本 TLS 1.3
# 查看最大版本https://pkg.go.dev/crypto/tls#Config
[ max_version: string ]receiver
用于配置通知接收者省略了部分国内基本不会用到的通知配置
# 接收者的唯一名称
name: string# 集成多个通知的配置
email_configs:[ - email_config, ... ]
opsgenie_configs:[ - opsgenie_config, ... ]
pagerduty_configs:[ - pagerduty_config, ... ]
pushover_configs:[ - pushover_config, ... ]
slack_configs:[ - slack_config, ... ]
sns_configs:[ - sns_config, ... ]
victorops_configs:[ - victorops_config, ... ]
webhook_configs:[ - webhook_config, ... ]
wechat_configs:[ - wechat_config, ... ]
telegram_configs:[ - telegram_config, ... ]
webex_configs:[ - webex_config, ... ]email_config
# 是否通知已解决的警报
[ send_resolved: boolean | default false ]# 要发送通知的目标邮件地址
to: tmpl_string# 发件人地址
[ from: tmpl_string | default global.smtp_from ]# 发送邮件的SMTP 主机
[ smarthost: string | default global.smtp_smarthost ]# 要标识给SMTP服务器的主机名
[ hello: string | default global.smtp_hello ]# SMTP 身份验证信息
# auth_password 和 auth_password_file 是冲突的
[ auth_username: string | default global.smtp_auth_username ]
[ auth_password: secret | default global.smtp_auth_password ]
[ auth_password_file: string | default global.smtp_auth_password_file ]
[ auth_secret: secret | default global.smtp_auth_secret ]
[ auth_identity: string | default global.smtp_auth_identity ]# SMTP TLS 要求,Go不支持连接到远程SMTP的未加密连接
[ require_tls: bool | default global.smtp_require_tls ]# TLS 配置
tls_config:[ tls_config ]# 邮件html正文
[ html: tmpl_string | default {{ template email.default.html . }} ]
# 邮件通知文本正文
[ text: tmpl_string ]# 邮件其他头 key/value 对
[ headers: { string: tmpl_string, ... } ]webhook_config
webhook 配置
# 是否通知已解决的警报
[ send_resolved: boolean | default true ]# HTTP Post 请求地址
url: string# HTTP 客户端配置
[ http_config: http_config | default global.http_config ]# 单个webhook 消息中的最大警报数。
# 超过此阈值的警报将被截断。保留为默认值0时将包含所有警报。
[ max_alerts: int | default 0 ]如下是webhook 发送的JSON内容示例
{version: 4,groupKey: string, // 标识警报组主键 (可以用于去重)truncatedAlerts: int, // 由于max_alerts截断的警报数量status: resolved|firing,receiver: string,groupLabels: object,commonLabels: object,commonAnnotations: object,externalURL: string, // 警报关联链接 Alertmanageralerts: [{status: resolved|firing,labels: object,annotations: object,startsAt: rfc3339,endsAt: rfc3339,generatorURL: string, // 用于触发警报的实体fingerprint: string // 警报指纹},...]
}wechat_config
微信通知
# 是否通知已解决的警报
[ send_resolved: boolean | default false ]# 微信API秘钥
[ api_secret: secret | default global.wechat_api_secret ]# 微信api地址
[ api_url: string | default global.wechat_api_url ]# 身份验证的corp id
[ corp_id: string | default global.wechat_api_corp_id ]# 定义API请求数据
[ message: tmpl_string | default {{ template wechat.default.message . }} ]
# 消息类型支持 text 和 markdown
[ message_type: string | default text ]
[ agent_id: string | default {{ template wechat.default.agent_id . }} ]
[ to_user: string | default {{ template wechat.default.to_user . }} ]
[ to_party: string | default {{ template wechat.default.to_party . }} ]
[ to_tag: string | default {{ template wechat.default.to_tag . }} ]matcher
- receiver: frontend-pagergroup_by: [product, environment]matchers:- teamfrontend匹配器有三部分组成
有效的Prometheus 标签名称、!、~或 !~。表示等于!表示字符串不相等~用于正则表达式的相等!~用于正则表达式的不相等。它们的含义与 PromQL 选择器中的含义相同UTF-8 字符串可以用双引号引起来。在每个标记之前或之后可能会有任意数量的空格
在第三部分中可能会是空字符串这部分支持转义规则\双引号\n换行符、\\反斜杠
匹配器会以AND 连接在一起只有都符合时才会匹配比如 警报有这些标签{alertname:Watchdog,severity:none} 不会匹配该列表
matchers:- alertname Watchdog- severity ~ warning|critical匹配器支持多个组合成一个列表也可以在单个字符串中组合多个匹配器 1、多个匹配器组成一个列表
matchers:- foo bar- dings !bums2、多个匹配器在一个字符串中
matchers: [ foo bar, dings ! bums ]也可以使用
matchers: [ foo bar,baz, dings ! bums ]3、使用类似PromQL的结构使用单引号包括
matchers: [ {foobar,dings!bums} ]4、为了避免转义问题可以使用YAML块引用
matchers:- |{quote~She said: \Hi, all!( Howre you…)?\}Prometheus 告警规则定义
Prometheus 的告警规则定义在 Prometheus 服务中Prometheus服务器定义告警规则这些规则将触发警报将警报发送到Alertmanager。 定义Prometheus 告警规则需要在Prometheus全局配置文件中通过rule_files字段加载该文件
rule_files:[ - filepath_glob ... ]告警规则定义在groups 下如下是一组告警规则示例
groups:
- name: examplerules:- alert: HighRequestLatencyexpr: job:request_latency_seconds:mean5m{jobmyjob} 0.5for: 10mlabels:severity: pageannotations:summary: High request latency各个字段解释
alert告警规则名称for警报评估等待时间只有当触发条件持续一段时间后才发送警报等待期间新的警报状态为pendinglabels自定义标签允许附加额外的标签到告警上任何已存在的冲突标签都会被重写标签支持模板化。annotations指定另一组标签用于存储更长的附加信息比如警报描述这个值支持模版化expr基于PromQL表达式的告警触发条件计算是否有满足条件的告警
Prometheus 支持在告警规则中使用模板化定义labels和annotations。标签以变量$labels形式表示指标值以$value形式表示比如 $labels.instance 表示警报实例
groups:
- name: examplerules:# 对超过5分钟还挂掉的实例发送警报- alert: InstanceDownexpr: up 0for: 5mlabels:severity: pageannotations:summary: Instance {{ $labels.instance }} downdescription: {{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.
Alertmanager 告警模板
Prometheus 告警模板指的是Alertmanager 消息通知模版有两种方式。
1、使用模板字符串 获取告警规则中定义的内容从CommonAnnotations中读取summary和description。
- name: team-xslack_configs:- channel: #alerts# Alertmanager templates apply here.text: !channel \nsummary: {{ .CommonAnnotations.summary }}\ndescription: {{ .CommonAnnotations.description }}2、定义可重用模版 创建一个模板文件/alertmanager/template/myorg.tmpl并创建一个名为slack.myorg.txt的模板。
{{ define slack.myorg.text }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}在Alertmanager 全局配置中设置templates模板文件路径随后在接收器中引用我们定义的模板slack.myorg.text。
global:slack_api_url: slack_webhook_urlroute:receiver: slack-notificationsgroup_by: [alertname, datacenter, app]receivers:
- name: slack-notificationsslack_configs:- channel: #alertstext: {{ template slack.myorg.text . }}templates:
- /etc/alertmanager/templates/myorg.tmpl模版也支持GO提供的默认函数详见 Go Function
Alertmanager 告警通知结构
如下是使用webhook接收到的通知报文
{receiver: webhook,status: firing,alerts: [{status: firing,labels: {alertname: DemoJobDown,instance: 192.168.0.102:8000,job: provider,monitor: codelab-monitor,severity: critical},annotations: {description: 192.168.0.102:8000 实例 已经挂机超过1分钟,summary: 实例 192.168.0.102:8000 挂机},startsAt: 2023-02-27T05:02:27.189Z,endsAt: 0001-01-01T00:00:00Z,generatorURL: http://5e22f422c1ad:9090/graph?g0.exprup%7Bjob%3D%22provider%22%7D%3D%3D0\u0026g0.tab1,fingerprint: db97f3904a8341cc}],groupLabels: {alertname: DemoJobDown},commonLabels: {alertname: DemoJobDown,instance: 192.168.0.102:8000,job: provider,monitor: codelab-monitor,severity: critical},commonAnnotations: {description: 192.168.0.102:8000 实例 已经挂机超过1分钟,summary: 实例 192.168.0.102:8000 挂机},externalURL: http://400258faa149:9093,version: 4,groupKey: {}:{alertname\DemoJobDown\},truncatedAlerts: 0
}整个报文表示一个Data Receiver 表示通知接收者的名称这里是webhook Status firing 表示警报触发resolved 表示警报已解决 Alerts 警报对象列表 GroupLabels 警报的分组 CommonLabels 警报的通用标签 CommonAnnotations 警报的通用注释用于长描述字符串 ExternalURL 发送通知的Alertmanager地址链接
Alerts 警报对象列表字段 Status 当前警报是触发状态还是已解决 Labels 附加到警报的标签 Annotations 警报的注释 StartsAt 警报触发时间如果省略由Alertmanager定义 EndsAt 当知道警报结束时间时设置否则为上次收到警报后可配置超时时间 GeneratorURL 引起该告警的实体地址链接 Fingerprint 警报指纹 Prometheus 系列文章 Prometheus 的介绍和安装直观感受PromQL及其数据类型PromQL之选择器和运算符PromQL之函数Prometheus 告警机制介绍及命令解读Prometheus 告警模块配置深度解析Prometheus 配置身份认证Prometheus 动态拉取监控服务Prometheus 监控云Mysql和自建MysqlPrometheus 监控服务器Prometheus 监控RedisPrometheus 监控消息队列Prometheus 监控ESPrometheus 自定义监控Prometheus 告警接入钉钉、邮箱、飞书Prometheus 高可用部署
文章转载自: http://www.morning.rzpkt.cn.gov.cn.rzpkt.cn http://www.morning.pkrb.cn.gov.cn.pkrb.cn http://www.morning.wqwbj.cn.gov.cn.wqwbj.cn http://www.morning.ybgcn.cn.gov.cn.ybgcn.cn http://www.morning.xflzm.cn.gov.cn.xflzm.cn http://www.morning.lrgfd.cn.gov.cn.lrgfd.cn http://www.morning.sgcdr.com.gov.cn.sgcdr.com http://www.morning.qjmnl.cn.gov.cn.qjmnl.cn http://www.morning.ntgsg.cn.gov.cn.ntgsg.cn http://www.morning.pjyrl.cn.gov.cn.pjyrl.cn http://www.morning.jbtwq.cn.gov.cn.jbtwq.cn http://www.morning.tgcw.cn.gov.cn.tgcw.cn http://www.morning.rhchr.cn.gov.cn.rhchr.cn http://www.morning.dbnrl.cn.gov.cn.dbnrl.cn http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn http://www.morning.dhtdl.cn.gov.cn.dhtdl.cn http://www.morning.lwjlj.cn.gov.cn.lwjlj.cn http://www.morning.qrksj.cn.gov.cn.qrksj.cn http://www.morning.nqcts.cn.gov.cn.nqcts.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn http://www.morning.qphgp.cn.gov.cn.qphgp.cn http://www.morning.rpsjh.cn.gov.cn.rpsjh.cn http://www.morning.ejknty.cn.gov.cn.ejknty.cn http://www.morning.gllgf.cn.gov.cn.gllgf.cn http://www.morning.ntzfl.cn.gov.cn.ntzfl.cn http://www.morning.qyqmj.cn.gov.cn.qyqmj.cn http://www.morning.nclps.cn.gov.cn.nclps.cn http://www.morning.zrpys.cn.gov.cn.zrpys.cn http://www.morning.ghwdm.cn.gov.cn.ghwdm.cn http://www.morning.dmldp.cn.gov.cn.dmldp.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.daxifa.com.gov.cn.daxifa.com http://www.morning.pwmpn.cn.gov.cn.pwmpn.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.beeice.com.gov.cn.beeice.com http://www.morning.kfysh.com.gov.cn.kfysh.com http://www.morning.pxsn.cn.gov.cn.pxsn.cn http://www.morning.tqxtx.cn.gov.cn.tqxtx.cn http://www.morning.jmdpp.cn.gov.cn.jmdpp.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.hkng.cn.gov.cn.hkng.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn http://www.morning.rbkgp.cn.gov.cn.rbkgp.cn http://www.morning.gwwtm.cn.gov.cn.gwwtm.cn http://www.morning.rnqrl.cn.gov.cn.rnqrl.cn http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn http://www.morning.mjyrg.cn.gov.cn.mjyrg.cn http://www.morning.trpq.cn.gov.cn.trpq.cn http://www.morning.qkzdc.cn.gov.cn.qkzdc.cn http://www.morning.mrncd.cn.gov.cn.mrncd.cn http://www.morning.xzsqb.cn.gov.cn.xzsqb.cn http://www.morning.qdxkn.cn.gov.cn.qdxkn.cn http://www.morning.llfwg.cn.gov.cn.llfwg.cn http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn http://www.morning.hmqmm.cn.gov.cn.hmqmm.cn http://www.morning.skmpj.cn.gov.cn.skmpj.cn http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn http://www.morning.mnqz.cn.gov.cn.mnqz.cn http://www.morning.mtrfz.cn.gov.cn.mtrfz.cn http://www.morning.plnry.cn.gov.cn.plnry.cn http://www.morning.rxfbf.cn.gov.cn.rxfbf.cn http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn http://www.morning.lwdzt.cn.gov.cn.lwdzt.cn http://www.morning.mksny.cn.gov.cn.mksny.cn http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn http://www.morning.nwpnj.cn.gov.cn.nwpnj.cn http://www.morning.llfwg.cn.gov.cn.llfwg.cn http://www.morning.rylr.cn.gov.cn.rylr.cn http://www.morning.mfmx.cn.gov.cn.mfmx.cn http://www.morning.fwnqq.cn.gov.cn.fwnqq.cn http://www.morning.snnwx.cn.gov.cn.snnwx.cn http://www.morning.deupp.com.gov.cn.deupp.com http://www.morning.yrms.cn.gov.cn.yrms.cn http://www.morning.klzt.cn.gov.cn.klzt.cn http://www.morning.wyfpc.cn.gov.cn.wyfpc.cn http://www.morning.xtdms.com.gov.cn.xtdms.com http://www.morning.qnzpg.cn.gov.cn.qnzpg.cn http://www.morning.fddfn.cn.gov.cn.fddfn.cn http://www.morning.yfqhc.cn.gov.cn.yfqhc.cn