长期支持版本

    社区创新版本

      一、A-Ops服务介绍

      A-Ops是用于提升主机整体安全性的服务,通过资产管理、CVE管理、异常检测、配置溯源等功能,识别并管理主机中的信息资产,监测主机中的软件漏洞、排查主机中遇到的系统故障,使得目标主机能够更加稳定和安全的运行。

      下表是A-Ops服务涉及模块的说明:

      模块说明
      aops-ceresA-Ops服务的客户端,
      提供采集主机数据与管理其他数据采集器(如gala-gopher)的功能。
      响应管理中心下发的命令,处理管理中心的需求与操作。
      aops-zeusA-Ops管理中心,主要负责与其他模块的交互,默认端口:11111
      提供基本主机管理功能,主机与主机组的添加、删除等功能依赖此模块实现。
      aops-diana为A-Ops提供异常诊断模块功能,默认端口:11112
      通过分析目标主机中数据,鉴别主机遇到的故障,提供故障修复功能。
      aops-hermes为A-Ops提供可视化操作界面,向用户展示数据信息。
      aops-apolloA-Ops的漏洞管理模块相关功能依赖此服务实现,默认端口:11116
      识别客户机周期性获取openEuler社区发布的安全公告,并更新到漏洞库中。
      通过与漏洞库比对,检测出系统和软件存在的漏洞。
      aops-vulcanusA-Ops的基本工具库,除aops-ceres与aops-hermes模块外,其余模块须与此模块共同安装使用。
      aops-tools提供基础环境一键部署脚本,安装后在/opt/aops/scripts目录下可见。
      gala-ragdollA-Ops的配置溯源功能依赖此模块实现,通过git监测并记录配置文件的改动,默认端口:11114
      dnf-hotpatch-plugindnf插件,使得dnf工具可识别热补丁信息,提供热补丁扫描以及热补丁修复的功能。

      二、部署环境要求

      建议采用3台openEuler 22.03 LTS SP1机器完成部署,具体用途以及部署方案如下:

      • 机器A用于部署mysql、elasticsearch、kafka、prometheus等,主要提供数据服务支持,同时部署诊断模式下运行的aops-diana,建议内存8G+。
      • 机器B用于部署A-Ops服务端,提供业务功能支持,建议内存6G+。
      • 机器C用于部署A-Ops客户端,用作一个被AOps服务纳管监控的主机,下述流程中该机器需同时部署aops-ceres和gala-gopher,建议内存4G+。
      机器编号配置IP部署模块
      机器A192.168.1.1mysql,elasticsearch,kafka,prometheus,aops-diana, redis
      机器B192.168.1.2aops-zeus,aops-apollo,aops-diana,aops-hermes,gala-ragdoll
      机器C192.168.1.3aops-ceres,gala-gopher

      三、服务端部署

      3.1、 机器管理

      使用机器管理功能需部署aops-zeus、aops-hermes以及mysql服务。

      每台机器在部署前,请先关闭防火墙。

      systemctl stop firewalld
      systemctl disable firewalld
      systemctl status firewalld
      

      3.1.1、节点信息

      机器编号配置IP部署模块
      机器A192.168.1.1mysql,aops-tools,prometheus,redis
      机器B192.168.1.2aops-zeus,aops-vulcanus,aops-hermes
      机器C192.168.1.3aops-ceres,gala-gopher

      3.1.2、部署步骤

      3.1.2.1、 部署mysql

      安装mysql:

      yum install mysql-server
      

      修改mysql配置文件:

      vim /etc/my.cnf
      

      新增bind-address,值为本机ip:

      [mysqld]
      bind-address=192.168.1.1
      log_timestamps=SYSTEM  # 确保mysql日志时间是系统时间
      

      重启mysql服务:

      systemctl restart mysqld
      

      连接数据库,设置root用户访问权限,创建aops数据库:

      [root@localhost ~]# mysql
      
      mysql> show databases;
      mysql> use mysql;
      mysql> select user,host from user;
      
      +---------------+-----------+
      | user          | host      |
      +---------------+-----------+
      | root          | localhost | //此处出现host为localhost时,说明mysql只允许本机连接,外网和本地软件客户端则无法连接。
      | mysql.session | localhost |
      | mysql.sys     | localhost |
      +---------------+-----------+
      3 rows in set (0.00 sec)
      
      mysql> update user set host = '%' where user='root'; //设置允许root用户任意IP访问。
      mysql> flush privileges;//刷新权限
      mysql> create database aops default character set utf8mb4 collate utf8mb4_unicode_ci;  //创建aops数据库
      mysql> exit
      

      3.1.2.2、 部署prometheus

      安装prometheus:

      yum install prometheus2
      

      修改配置文件:

      vim /etc/prometheus/prometheus.yml
      

      将所有客户端的gala-gopher地址新增到prometheus的监控节点中。

      # A scrape configuration containing exactly one endpoint to scrape:
      # Here it's Prometheus itself.
      scrape_configs:
        # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
        - job_name: 'prometheus'
      
          # metrics_path defaults to '/metrics'
          # scheme defaults to 'http'.
      
          static_configs:
          - targets: ['localhost:9090', '192.168.1.3:8888'] //本指南中机器C用于部署客户端,故添加机器C的gala-gopher地址
      

      启动服务:

      systemctl start prometheus
      

      3.1.2.3、 部署redis

      安装redis:

      yum install redis
      

      修改配置文件:

      vim /etc/redis.conf
      

      添加绑定IP:

      # It is possible to listen to just one or multiple selected interfaces using
      # the "bind" configuration directive, followed by one or more IP addresses.
      #
      # Examples:
      #
      # bind 192.168.1.100 10.0.0.1
      # bind 127.0.0.1 ::1
      #
      # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
      # internet, binding to all the interfaces is dangerous and will expose the
      # instance to everybody on the internet. So by default we uncomment the
      # following bind directive, that will force Redis to listen only into
      # the IPv4 lookback interface address (this means Redis will be able to
      # accept connections only from clients running into the same computer it
      # is running).
      #
      # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
      # JUST COMMENT THE FOLLOWING LINE.
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      bind 127.0.0.1 192.168.1.1 //此处添加机器A的真实IP 
      

      启动redis服务:

      systemctl start redis
      

      3.1.2.4、 部署aops-zeus

      安装aops-zeus:

      yum install aops-zeus
      

      修改配置文件:

      vim /etc/aops/zeus.ini
      

      将配置文件中各服务的地址修改为真实地址,本指南中aops-zeus部署于机器B,故需把IP地址配为机器B的ip地址。

      [zeus]
      ip=192.168.1.2  // 此处ip修改为机器B真实ip
      port=11111
      
      [uwsgi]
      wsgi-file=manage.py
      daemonize=/var/log/aops/uwsgi/zeus.log
      http-timeout=600
      harakiri=600
      processes=2		// 生成指定数目的worker/进程
      gevent=100		// gevent异步核数
      
      [mysql]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=3306
      database_name=aops
      engine_format=mysql+pymysql://@%s:%s/%s
      pool_size=100
      pool_recycle=7200
      
      [prometheus]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=9090
      query_range_step=15s
      
      [agent]
      default_instance_port=8888
      
      [redis]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=6379
      
      [diana]
      ip=192.168.1.2  // 此处ip修改为机器B真实ip
      port=11112
      
      [apollo]
      ip=192.168.1.2  // 此处ip修改为机器B真实ip
      port=11116
      

      启动aops-zeus服务:

      systemctl start aops-zeus
      

      3.1.2.5、 部署aops-hermes

      安装aops-hermes:

      yum install aops-hermes
      

      修改配置文件,由于将所有服务都部署在机器B,故需将web访问的各服务地址配置成机器B的真实ip。

      vim /etc/nginx/aops-nginx.conf
      

      部分服务配置展示:

      
              # 保证前端路由变动时nginx仍以index.html作为入口
              location / {
                  try_files $uri $uri/ /index.html;
                  if (!-e $request_filename){
                      rewrite ^(.*)$ /index.html last;
                  }
              }
      
              location /api/ {
                  proxy_pass http://192.168.1.2:11111/; //此处修改为aops-zeus部署机器真实IP
              }
      
              location /api/domain {
                  proxy_pass http://192.168.1.2:11114/; //此处IP对应gala-ragdoll的IP地址
                  rewrite ^/api/(.*) /$1 break;
              }
              
              location /api/check {
                  proxy_pass http://192.168.1.2:11112/; //此处IP对应configurable模式运行的aops-diana的IP地址
                  rewrite ^/api/(.*) /$1 break;
              }
      		
              location /api/vulnerability {
                  proxy_pass http://192.168.1.2:11116/; //此处IP对应aops-apollo的IP地址
                  rewrite ^/api/(.*) /$1 break;
              }
      

      开启aops-hermes服务:

      systemctl start aops-hermes
      

      3.2、 CVE管理

      CVE管理功能在机器管理的基础上实现,故在部署CVE管理功能前须完成机器管理部分的部署,然后再部署aops-apollo。

      数据服务部分aops-apollo服务的运行需要mysql、elasticsearch数据库的支持。

      3.2.1、 节点信息

      机器编号配置IP部署模块
      机器A192.168.1.1mysql,elasticsearch,redis
      机器B192.168.1.2aops-zeus,aops-apollo,aops-hermes,aops-vulcanus
      机器C192.168.1.3aops-ceres

      3.2.2、部署步骤

      3.2.2.1、 部署基础服务

      见 3.1

      3.2.2.2、 部署elasticsearch

      生成elasticsearch的repo源:

      echo "[aops_elasticsearch]
      name=Elasticsearch repository for 7.x packages
      baseurl=https://artifacts.elastic.co/packages/7.x/yum
      gpgcheck=1
      gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
      enabled=1
      autorefresh=1
      type=rpm-md" > "/etc/yum.repos.d/aops_elascticsearch.repo"
      

      通过yum命令安装:

      yum install elasticsearch-7.14.0-1
      

      修改elasticsearch配置文件:

      vim /etc/elasticsearch/elasticsearch.yml
      
      # ------------------------------------ Node ------------------------------------
      #
      # Use a descriptive name for the node:
      #
      node.name: node-1	
      
      # ---------------------------------- Network -----------------------------------
      #
      # By default Elasticsearch is only accessible on localhost. Set a different
      # address here to expose this node on the network:
      #
      # 此处修改为机器A真实ip
      network.host: 192.168.1.1 
      #
      # By default Elasticsearch listens for HTTP traffic on the first free port it
      # finds starting at 9200. Set a specific HTTP port here:
      #
      http.port: 9200		
      #
      # For more information, consult the network module documentation.
      #
      
      # --------------------------------- Discovery ----------------------------------
      #
      # Pass an initial list of hosts to perform discovery when this node is started:
      # The default list of hosts is ["127.0.0.1", "[::1]"]
      #
      #discovery.seed_hosts: ["host1", "host2"]
      #
      # Bootstrap the cluster using an initial set of master-eligible nodes:
      #
      cluster.initial_master_nodes: ["node-1"]
      # 跨域配置
      http.cors.enabled: true	
      http.cors.allow-origin: "*"
      

      重启elasticsearch服务:

      systemctl restart elasticsearch
      

      3.2.2.3、 部署apollo

      安装aops-apollo:

      yum install aops-apollo
      

      修改配置文件:

      vim /etc/aops/apollo.ini
      

      将apollo.ini配置文件中各服务的地址修改为真实地址:

      [apollo]
      ip=192.168.1.2//此处修改为机器B的真实IP
      port=11116
      host_vault_dir=/opt/aops
      host_vars=/opt/aops/host_vars
      
      [zeus]
      ip=192.168.1.2	//此处修改为机器B的真实IP
      port=11111
      
      # herms info is used to send mail.
      [hermes]
      ip=192.168.1.2	//此处修改为部署aops-hermes的真实IP,以机器B的IP地址为例
      port=80		//此处改为hermes服务实际使用端口
      
      [cve]
      cve_fix_function=yum
      # value between 0-23, for example, 2 means 2:00 in a day.
      cve_scan_time=2
      
      [mysql]
      ip=192.168.1.1 //此处修改为机器A的真实IP
      port=3306
      database_name=aops
      engine_format=mysql+pymysql://@%s:%s/%s
      pool_size=100
      pool_recycle=7200
      
      [elasticsearch]
      ip=192.168.1.1 //此处修改为机器A的真实IP
      port=9200
      max_es_query_num=10000000
      
      [redis]
      ip=192.168.1.1 //此处修改为机器A的真实IP
      port=6379
      
      [uwsgi]
      wsgi-file=manage.py
      daemonize=/var/log/aops/uwsgi/apollo.log
      http-timeout=600
      harakiri=600
      processes=2
      gevent=100
      

      启动aops-apollo服务:

      systemctl start aops-apollo
      

      3.3、 异常检测

      异常检测功能离不开机器管理服务的支持,故在部署异常检测功能前须完成机器管理部分的部署,然后再部署aops-diana。

      基于分布式部署考虑,aops-diana服务需在机器A与机器B同时部署,分别扮演消息队列中的生产者与消费者角色。

      数据服务部分aops-diana服务的运行需要mysql、elasticsearch、kafka以及prometheus的支持。

      3.3.1、 节点信息

      机器编号配置IP部署模块
      机器A192.168.1.1mysql,elasticsearch,kafka,prometheus,aops-diana
      机器B192.168.1.2aops-zeus,aops-diana,aops-hermes,aops-vulcanus
      机器C192.168.1.3aops-ceres,gala-gopher

      3.3.2、 部署步骤

      3.3.2.1、 部署基础服务

      见 3.1

      3.3.2.2、 部署elasticsearch

      见 3.2.2.2

      3.3.2.3、 部署kafka

      kafka使用zooKeeper用于管理、协调代理,所以部署kafka时还需部署zookeeper服务。

      3.3.2.3.1、 安装zookeeper

      安装:

      yum install zookeeper
      

      启动服务:

      systemctl start zookeeper
      
      3.3.2.3.2、 安装kafka

      安装:

      yum install kafka
      

      修改配置文件:

      vim /opt/kafka/config/server.properties
      

      将listeners 改为本机ip:

      ############################# Socket Server Settings #############################
      
      # The address the socket server listens on. It will get the value returned from
      # java.net.InetAddress.getCanonicalHostName() if not configured.
      #   FORMAT:
      #     listeners = listener_name://host_name:port
      #   EXAMPLE:
      #     listeners = PLAINTEXT://your.host.name:9092
      listeners=PLAINTEXT://192.168.1.1:9092
      

      启动kafka服务:

      cd /opt/kafka/bin
      nohup ./kafka-server-start.sh ../config/server.properties &
      tail -f ./nohup.out  # 查看nohup所有的输出出现A本机ip 以及 kafka启动成功INFO;
      

      3.3.2.4、 部署diana

      机器A与机器B中aops-diana安装流程没有任何差别。

      安装aops-diana:

      yum install aops-diana
      

      修改配置文件,机器A与机器B中aops-diana分别扮演不同的角色,通过配置文件的差异来区分两者扮演角色的不同。

      vim /etc/aops/diana.ini
      

      (1)机器A中aops-diana以executor模式启动,扮演kafka消息队列中的消费者角色,配置文件需修改部分如下所示:

      [diana]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=11112
      mode=executor  // 该模式为executor模式,用于常规诊断模式下的执行器,扮演kafka中消费者角色。
      timing_check=on
      
      [default_mode]
      period=60
      step=60
      
      [elasticsearch]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=9200
      max_es_query_num=10000000
      
      [mysql]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=3306
      database_name=aops
      engine_format=mysql+pymysql://@%s:%s/%s
      pool_size=100
      pool_recycle=7200
      
      [redis]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=6379
      
      [prometheus]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=9090
      query_range_step=15s
      
      [agent]
      default_instance_port=8888
      
      [zeus]
      ip=192.168.1.2  // 此处ip修改为机器B真实ip
      port=11111
      
      [consumer]
      kafka_server_list=192.168.1.1:9092  // 此处ip修改为机器A真实ip
      enable_auto_commit=False
      auto_offset_reset=earliest
      timeout_ms=5
      max_records=3
      task_name=CHECK_TASK
      task_group_id=CHECK_TASK_GROUP_ID
      result_name=CHECK_RESULT
      
      [producer]
      kafka_server_list = 192.168.1.1:9092  // 此处ip修改为机器A真实ip
      api_version = 0.11.5
      acks = 1
      retries = 3
      retry_backoff_ms = 100
      task_name=CHECK_TASK
      task_group_id=CHECK_TASK_GROUP_ID
      
      [uwsgi]
      wsgi-file=manage.py
      daemonize=/var/log/aops/uwsgi/diana.log
      http-timeout=600
      harakiri=600
      processes=2
      threads=2
      

      (2)机器B中diana以configurable模式启动,扮演kafka消息队列中的生产者角色,aops-hermes中关于aops-diana的端口配置以该机器ip与端口为准,配置文件需修改部分如下所示:

      [diana]
      ip=192.168.1.2  // 此处ip修改为机器B真实ip
      port=11112
      mode=configurable  // 该模式为configurable模式,用于常规诊断模式下的调度器,充当生产者角色。
      timing_check=on
      
      [default_mode]
      period=60
      step=60
      
      [elasticsearch]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=9200
      max_es_query_num=10000000
      
      [mysql]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=3306
      database_name=aops
      engine_format=mysql+pymysql://@%s:%s/%s
      pool_size=100
      pool_recycle=7200
      
      [redis]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=6379
      
      [prometheus]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=9090
      query_range_step=15s
      
      [agent]
      default_instance_port=8888
      
      [zeus]
      ip=192.168.1.2  // 此处ip修改为机器B真实ip
      port=11111
      
      [consumer]
      kafka_server_list=192.168.1.1:9092  // 此处ip修改为机器A真实ip
      enable_auto_commit=False
      auto_offset_reset=earliest
      timeout_ms=5
      max_records=3
      task_name=CHECK_TASK
      task_group_id=CHECK_TASK_GROUP_ID
      result_name=CHECK_RESULT
      
      [producer]
      kafka_server_list = 192.168.1.1:9092  // 此处ip修改为机器A真实ip
      api_version = 0.11.5
      acks = 1
      retries = 3
      retry_backoff_ms = 100
      task_name=CHECK_TASK
      task_group_id=CHECK_TASK_GROUP_ID
      
      [uwsgi]
      wsgi-file=manage.py
      daemonize=/var/log/aops/uwsgi/diana.log
      http-timeout=600
      harakiri=600
      processes=2
      threads=2
      

      启动aops-diana服务:

      systemctl start aops-diana
      

      3.4、 配置溯源

      A-Ops配置溯源在机器管理的基础上依赖gala-ragdoll实现,同样在部署gala-ragdoll服务之前,须完成机器管理部分的部署。

      3.4.1、 节点信息

      机器编号配置IP部署模块
      机器A192.168.1.1mysql,aops-tools
      机器B192.168.1.2aops-zeus,gala-ragdoll,aops-hermes,aops-vulcanus
      机器C192.168.1.3aops-ceres

      3.4.2、 部署步骤

      3.4.2.1、 部署基础服务

      见 3.1

      3.4.2.2、 部署gala-ragdoll

      安装gala-ragdoll:

      yum install gala-ragdoll python3-gala-ragdoll
      

      修改配置文件:

      vim /etc/ragdoll/gala-ragdoll.conf
      

      将collect节点collect_address中IP地址修改为机器B的地址,collect_api与collect_port修改为实际接口地址。

      [git]
      git_dir = "/home/confTraceTest"
      user_name = "user_name"
      user_email = "user_email"
      
      [collect]
      collect_address = "http://192.168.1.2"    //此处修改为机器B的真实IP
      collect_api = "/manage/config/collect"    //此处接口原为示例值,需修改为实际接口值/manage/config/collect
      collect_port = 11111                      //此处修改为aops-zeus服务的实际端口
      
      [sync]
      sync_address = "http://192.168.1.2"
      sync_api = "/demo/syncConf"
      sync_port = 11114
      
      
      [ragdoll]
      port = 11114
      

      启动gala-ragdoll服务:

      systemctl start gala-ragdoll
      

      3.5、一键化部署

      A-Ops服务也支持一键化部署,这部分依赖aops-tools中的脚本实现,具体使用见A-Ops一键化部署指南

      四、客户端部署

      客户端依赖aops-ceres模块实现,部分数据采集依赖gala-gopher完成,关于这部分的部署,见aops-ceres部署指南

      FAQ:

      1. 管理中心(aops-zeus)与各模块之间通过http协议进行连接通信。
      2. 若防火墙不方便关闭,请设置放行服务部署过程涉及的所有接口,否则会造成服务不可访问,进而影响A-Ops的正常使用。
      3. 基于安全角度考虑,机器管理中添加新机器的方式,由客户端主动发起,具体操作请参考aops-ceres部署指南关于注册部分。
      4. 异常检测,配置溯源,CVE管理模块相互独立,用户实际使用中可根据需求选择部署。
      5. 所有服务部署分为服务端与客户端两部分,服务端部署参考具体功能需求进行部署即可,客户端只需部署aops-ceres和gala-gopher即可。
      6. elasticsearch配置跨域配置部分,根据实际需求进行配置。
      7. 部分http访问接口为同步接口,当执行时间较长时,web端可能返回504错误,可向nginx配置中添加proxy_read_timeout配置项,并适当调大该数值,可降低504问题出现概率。
      8. 批量添加主机接口服务执行过程中会受到aops-zeus安装所在主机sshd服务配置中最大连接数(MaxStartups)的限制,会出现部分主机不能连接的情况,如有大量添加主机的需求,可考虑临时调增该数值。关于该配置项的修改可参考此文档,将其调整为合适的值。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份