监控

内部监控应用程序(geonode.monitor)

注解

此应用程序需要MaxMind的GeoIP数据库文件。

基本概念和对象

GeoNode监视是一个可配置的监视应用程序,它允许监视GeoNode安装(包括Geoserver部署)的内部资源和硬件资源。

监控应用程序是可配置的,因此可以处理不同的部署方案-从在单个主机上运行的GeoNode和Geoserver,到将Geoserver部署到多个主机的分布式安装。

监控应用程序使用三个基本实体类来描述现实元素: HostService TypeService

  • Host 是描述运行GN或GS的操作系统的物理(或虚拟)实例的对象。此对象仅用于分组,不直接用于监控。

  • Service Type 是对服务种类的描述。根据服务类型的不同,存储不同的指标,使用不同的数据收集机制。此外,对于系统监视,它不是直接执行的,而是使用GeoNode或Geoserver作为监视代理。这意味着,监视系统不需要安装额外的软件,而且,没有安装GeoNode或Geoserver的主机也不会受到监视。服务类型有四种:

    • hostgeonodehostgeoserver -这些类型分别描述与GeoNode或Geoserver一起运行的系统监视探测器,

    • geonodegeoserver -应用程序级别的探测器,用于监控一个特定的GeoNode或Geoserver实例。

  • Service 描述一个特定的探测实例,可以是主机级别的,也可以是应用程序级别的。服务引用主机和服务类型。每个服务都必须命名,并且名称在系统范围内应该是唯一的。

如上所述,每个 Service Type 保留了一组 metrics ,特定于该类型。一个 metric 是对测量值的描述,例如:请求数量、响应大小或时间、CPU使用率、空闲内存等 Service Type 有自己的指标集。度量值可以是值计数器(如用户国家)、数字计数器(如请求数)或速率(如网络接口上的字节输入/输出)。

除了度量数据,监视还将存储在请求处理期间捕获的异常的异常信息。

定期(最多每1分钟)收集、聚合并以聚合形式存储数据。用户可以查看预定义相对时段(最后一分钟、最后10分钟、最后一小时、最后一天、上周)的数据。

用户可以启用和配置自动检查,该检查将在每个收集/聚合周期之后运行,并在该运行中的度量值超过配置的阈值时发出通知。

分析

GeoNode监视应用程序还提供有关用户级别的资源使用情况的信息。

无论何时发生有关某些资源的事件,都会收集这些信息。事件可以是不同类型的 (EventType ),它们指的是对资源的常见用户活动(上传、查看、下载等)。这些数据使用专用的 metric 并且根据所考虑的时间间隔和所需的分辨率,基于可配置的粒度进行聚集。

因此,一旦定义了时间间隔和时间范围,分析客户端就可以检索统计数据,例如:

  • 独立访问者总数;

  • 触发特定类型事件的独立访问者数量;

  • 在某些资源类型上触发事件的唯一访问者数量;

  • 给定国家/地区的独立访问者数量;

  • 在特定资源上触发事件的独立访问者数量;

  • 考虑多个条件组合的唯一访问者数量(例如,某个资源类型上的事件类型)。

安装

警告

此插件需要启用Potgresql DB后端

  • 确保 UTC 时区到您的数据库

    psql -c 'set timezone=UTC;'
    
  • 启用 MONITORING_ENABLED 标记并确保以下代码在您的设置中:

# Settings for MONITORING plugin
CORS_ORIGIN_ALLOW_ALL = ast.literal_eval(os.environ.get('CORS_ORIGIN_ALLOW_ALL', 'False'))
GEOIP_PATH = os.getenv('GEOIP_PATH', os.path.join(PROJECT_ROOT, 'GeoIPCities.dat'))
MONITORING_ENABLED = ast.literal_eval(os.environ.get('MONITORING_ENABLED', 'True'))

MONITORING_CONFIG = os.getenv("MONITORING_CONFIG", None)
MONITORING_HOST_NAME = os.getenv("MONITORING_HOST_NAME", HOSTNAME)
MONITORING_SERVICE_NAME = os.getenv("MONITORING_SERVICE_NAME", 'local-geonode')

# how long monitoring data should be stored
MONITORING_DATA_TTL = timedelta(days=int(os.getenv("MONITORING_DATA_TTL", 7)))

# this will disable csrf check for notification config views,
# use with caution - for dev purpose only
MONITORING_DISABLE_CSRF = ast.literal_eval(os.environ.get('MONITORING_DISABLE_CSRF', 'False'))

if MONITORING_ENABLED:
    if 'geonode.monitoring' not in INSTALLED_APPS:
        INSTALLED_APPS += ('geonode.monitoring',)
    if 'geonode.monitoring.middleware.MonitoringMiddleware' not in MIDDLEWARE_CLASSES:
        MIDDLEWARE_CLASSES += \
            ('geonode.monitoring.middleware.MonitoringMiddleware',)

# skip certain paths to not to mud stats too much
MONITORING_SKIP_PATHS = ('/api/o/',
                         '/monitoring/',
                         '/admin',
                         '/jsi18n',
                         STATIC_URL,
                         MEDIA_URL,
                         re.compile('^/[a-z]{2}/admin/'),
                         )

# configure aggregation of past data to control data resolution
# list of data age, aggregation, in reverse order
# for current data, 1 minute resolution
# for data older than 1 day, 1-hour resolution
# for data older than 2 weeks, 1 day resolution
MONITORING_DATA_AGGREGATION = (
                               (timedelta(seconds=0), timedelta(minutes=1),),
                               (timedelta(days=1), timedelta(minutes=60),),
                               (timedelta(days=14), timedelta(days=1),),
                               )

# privacy settings
USER_ANALYTICS_ENABLED = ast.literal_eval(os.getenv('USER_ANALYTICS_ENABLED', 'False'))
  • DJANGO_SETTINGS_MODULE=<project_name>.settings python manage.py migrate monitoring
    

    应用数据库架构更改并插入初始数据

  • DJANGO_SETTINGS_MODULE=<project_name>.settings python manage.py updategeoip
    

    若要获取MaxMind的GeoIP数据库文件,请执行以下操作。它将被写入由指定的路径 GEOIP_PATH 设置。

  • DJANGO_SETTINGS_MODULE=<project_name>.settings python manage.py collect_metrics -n -t xml -f --since='<yyyy-mm-dd HH:mm:ss>'
    

    创建第一个指标。

    警告

    替换 <yyyy-mm-dd HH:mm:ss> 一开始就有一个真正的约会时间。

  • 更新 Sites 来自admin;确保它包含正确的主机名

  • 不要忘记启用通知并从用户配置文件配置它们

启用Collect_Metrics cron

警告

以下是基于Ubuntu16.04/18.04的机器的使用说明,但其他操作系统的使用步骤与此类似。基本概念是您必须允许系统每分钟运行该命令( without -f and since ):

DJANGO_SETTINGS_MODULE=<project_name>.settings python manage.py collect_metrics -n -t xml

Cront作业

sudo crontab -e
# Add the following line at the bottom; this will run the supervisor command every minute
* * * * * supervisorctl start geonode-monitoring

主管

sudo apt install supervisor
sudo service supervisor restart
sudo update-rc.d supervisor enable
sudo vim /etc/supervisor/conf.d/geonode-monitoring.conf
[program:geonode-monitoring]
command=<path_to_virtualenv>/geonode/bin/python -W ignore <path_to_your_project>/geonode/manage.py collect_metrics -n -t xml
directory = <path_to_your_project>
environment=DJANGO_SETTINGS_MODULE="<your_project>.settings"
user=<your_user>
numproc=1
stdout_logfile=/var/log/geonode-celery.log
stderr_logfile=/var/log/geonode-celery.log
autostart = true
autorestart = true
startsecs = 10
stopwaitsecs = 600
priority = 998
sudo service supervisor restart
sudo supervisorctl start geonode-monitoring
sudo supervisorctl status geonode-monitoring
sudo vim /etc/hosts
127.0.0.1       localhost
<public_ip>     <your_host.your_domain> <your_host>

# The following lines are desirable for IPv6 capable hosts

配置

为了进行工作监控,至少 Service 应该进行配置。让我们假设以下部署场景:

  • 只有一台机器, geo01

  • geo01 托管GeoNode和Geoserver(包括PostgreSQL)。

  • 应用程序在端口80上使用nginx+uwsgi提供服务,但是可以通过 localhost 地址。

  • Geoserver是从 /geoserver/ 路径

  • GeoNode从以下位置提供 / 路径

以下是如何为部署方案创建监视设置的分步说明:

  1. 以admin身份登录,进入admin区:

    转到管理部分
  2. 监控 节(或类型 /admin/monitoring/ 作为URL中的路径):

    转到管理/监控部分
  3. 主机

    转到管理/监视/主机部分
  4. 单击 添加主机+

    添加主机
  5. Enter following information: * host: localhost * ip: 127.0.0.1 Note, that host value is arbitrary. You can enter other name if you like. Don't forget to save.

    添加的主机
  6. 服务

    转到管理/监控/服务部分
  7. 单击 添加服务+

    添加服务
  8. 输入以下信息:

    • namelocal-geonode

    • hostlocalhost

    • 服务类型geonode

    添加地理节点服务
  9. 添加另一个 服务 输入以下信息:

    • namelocal-system-geonode

    • hostlocalhost

    • 服务类型hostgeonode

    • urlhttp://localhost/ (应指向GeoNode主页)

    添加hostgeonode服务
  10. 添加另一个 服务 并输入以下信息:

  • namelocal-geoserver

  • hostlocalhost

  • 服务类型geoserver

  • urlhttp://localhost/geoserver/ (应指向Geoserver主页)

添加Geoserver服务

总而言之,应在管理/监控中创建以下条目:

  • 主机: localhost ,IP:127.0.0.1

  • 服务: local-geonode
    • 主机 localhost

    • 类型 geonode

  • 服务: local-geoserver
    • URL http://localhost/geoserver/

    • 主机 localhost

    • 类型 geoserver

  • 服务: local-system-geonode
    • URL http://localhost/

    • 主机 localhost

    • 类型 hostgeonode

用法

监控界面仅对超级用户可用。它在配置文件菜单中可用:

监控链路

仪表板

主视图概述了GeoNode部署的最新情况。

监控仪表板

顶杆和指示器

指示灯处于正常状态

使用顶部栏按钮,用户可以:

  • 从嵌套界面元素(图表、警报、错误)返回

  • 选择将从中聚合和显示数据的时间窗口(从现在开始的前10分钟、前1小时、前一天或上周)

  • 查看当前使用的时间窗口

  • 启用/禁用自动刷新

下面是四个主要的健康指标:

  • 聚合 运行状况检查 信息。

    此元素将为:

    • green 如果没有警报或错误

    • yellow 如果有警报

    • red 如果有错误

  • 正常运行时间 这显示了GeoNode的系统正常运行时间。

  • 警报 显示来自定义的检查的通知数。单击时,警报框将显示详细信息。有关详细信息,请参阅通知说明。

  • 错误 -显示在请求处理过程中捕获的错误数。单击时,错误框将显示捕获的错误的详细列表。有关详细信息,请参阅错误说明。

指示灯处于正常状态

处于错误状态的指示灯

软件性能

软件性能视图按服务类型(WMS、WFS、OCS等)显示受监视的所有请求的Geoserver Web服务统计数据,以及特定于OWS的详细数据。

../../../_images/dashboard-sw-performance.png

单击

../../../_images/dashboard-sw-performance-charts-button.png

将显示包含总体性能和每个OWS性能的数据历史记录的图表:

../../../_images/dashboard-sw-performance-chart.png

硬件性能

硬件性能框显示所选主机的硬件使用统计信息(使用任何hostgeonode或hostgeosserver类型的服务进行监视):CPU使用百分比和平均内存消耗。用户可以选择将从哪个主机显示数据。

../../../_images/dashboard-hw-performance.png

单击

../../../_images/dashboard-hw-performance-charts-button.png

将显示图表,其中包含选定主机和时间段的数据历史记录

../../../_images/dashboard-hw-performance-charts.png

错误

错误视图将显示GeoNode和Geoserver中捕获的错误列表。将显示所选时间窗口的列表内容。

../../../_images/dashboard-errors-list.png
对于每个错误,都提供了详细信息:
  • 错误类、消息和堆栈跟踪

  • 基本请求上下文(IP、路径、用户代理)

../../../_images/dashboard-error-details.png

警报

警报是有关观察到的指标包含的值超出允许范围(例如,响应时间超过30秒,或在最近30分钟内未处理任何请求)的情况的描述性信息。警报由下面描述的通知机制生成。

警报视图将显示当前时刻的警报列表(此处不显示过去生成的警报):

../../../_images/monitoring-alerts.png

每个警报都包含更多有关错误的描述性信息:

../../../_images/monitoring-alerts-unfolded.png
通知

通知机制(不要与GeoNode中的通知应用程序混淆)是一种通知选定用户有关情况的方法,在这些情况下,收集的指标数据将指示部署问题。可以从警报视图访问通知:

../../../_images/monitoring-alerts-notification-link.png

可以有几种可用的通知配置。

../../../_images/dashboard-notifications-list.png

每个通知配置包含两个主要元素:

  • 生成警报时应通知的电子邮件地址列表

  • 检查列表(必须至少有一个检查处于无效状态才能生成警报)

../../../_images/dashboard-notifications-config.png

用户可以添加任意数量的电子邮件。电子邮件地址不需要指向在GeoNode实例中注册的用户。如果提供的电子邮件不属于任何用户,警报将作为常规电子邮件发送。如果提供的电子邮件可以与特定用户关联,则将使用通知应用程序(以及该用户的通知设置)发送警报。

与GeoHealthCheck集成

还可以使用外部工具轻松监控GeoNode,例如 GeoHealthCheck 。看见 Documentation on adding resources 有关详细信息,请参阅。