zoukankan      html  css  js  c++  java
  • Nagios监控系统部署(源码)(四)

    Nagios监控系统部署(源码)

     

    1. 概述

    Nagios是一款非常优秀的监控报警信息。其设计思想很先进,以Nagios Core + Nagios Plugin的方式来实现核心功能和功能扩展。
    同时其按照监控和报警的本质,即监测,控制,报警,通知四部分,把各个部分的对象通过配置文件颗粒化,然后相互引用,并最终形成对主机或者服务的动作执行,如报警,通知,入库,展示,处理等操作为落地配置。
    Nagios Core的功能,应该是解析配置文件和配置文件逻辑,而Nagios Plugin则负责收集监控对象的状态。
    Nagios包括可选的Web前端。Nagios command模式是默认的。

    2. 部署Nagios

    2.1 创建Nagios用户组

    本篇博客主要在虚拟机console上进行Nagios监控系统部署。需要提前为Nagios创建全局系统用户nagios和nagcmd用户,用于运行nagios后台进程等。
    执行命令:
    useradd -m -s /sbin/nologin -u 603 nagcmd
    useradd -m -s /sbin/nologin -u 604 nagios

    注:此处有错误,-m为不创建家目录,这里应该是-M。-s /sbin/nagios,此项执行会造成nagios启动报错。

    执行命令,将nagios添加至nagcmd组;将nagcmd和nagios添加至apache组
    usermod -a -G nagcmd nagios
    usermod -a -G nagcmd,nagios apache

    2.2 下载Nagios和Nagios-plugin源码

    下载最新版本的naigos和nagios-plugin
    wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.4.1.tar.gz --no-check-certificate
    wget http://nagios-plugins.org/download/nagios-plugins-2.1.2.tar.gz

    2.3 编译安装

    解压

    tar -zxvf nagios-4.4.1.tar.gz -C /tmp
    tar -zxvf nagios-plugins-2.1.2.tar.gz -C /tmp

    配置configure

    ./configure 
    --prefix=/usr/local/globle/softs/monitor/nagios/4.4.1 
    --sysconfdir=/usr/local/globle/softs/monitor/nagios/4.4.1/etc 
    --localstatedir=/usr/local/globle/softs/monitor/nagios/4.4.1/var/ 
    --with-opsys=linux 
    --with-dist-type=systemd 
    --with-inetd-type=systemd 
    --enable-event-broker 
    --enable-debugging 
    --with-webdir=/usr/local/globle/softs/monitor/nagios/4.4.1/share 
    --with-pluginsdir=/usr/local/globle/softs/monitor/nagios/4.4.1/plugins 
    --with-brokersdir=/usr/local/globle/softs/monitor/nagios/4.4.1/brokers 
    --with-cgibindir=/usr/local/globle/softs/monitor/nagios/4.4.1/cgibin 
    --with-logdir=/usr/local/globle/softs/monitor/nagios/4.4.1/log 
    --with-initdir=/usr/local/globle/softs/monitor/nagios/4.4.1/init.d 
    --with-checkresult-dir=/usr/local/globle/softs/monitor/nagios/4.4.1/var/spool/checkresults 
    --with-nagios-user=nagios 
    --with-nagios-group=nagios 
    --with-command-user=nagcmd 
    --with-command-group=nagcmd 
    --with-mail=/bin/mail 
    --with-httpd-conf=/etc/httpd/conf.d/ 
    --with-temp-dir=/tmp 
    --with-iobroker=epoll 

    编译

    执行一下命令:
    make all 全部编译
    make install 安装nagios的基本功能
    make install-init 安装nagios的启动脚本
    make install-commandmode 安装nagios的命令模式
    make install-config 安装nagios配置模板
    make install-webconfig 安装naigios的http配置文件

    拷贝启动脚本

    在上面的编译过程中,将nagios启动脚本放在了全局文件系统上。此时如果想通过service nagios start的方式启动nagios,需要执行一下命令:
    ln -fs /usr/local/globle/softs/monitor/nagios/4.4.1/init.d/nagios /etc/init.d/

    启动
    在启动过程中出现报错,具体报错信息和解决方式参见:
    笔记内链:《Error【0006】:could not create or update nagios.configtest.md
    博客园地址:https://www.cnblogs.com/liwanliangblog/p/9266985.html

    站点访问
    上述的操作中,通过--with-httpd-conf选项,指定了nagios的http配置。
    这段配置使用户可以通过浏览器来访问httpd服务器提供的nagios监控站站点。
    配置生成目录在/etc/httpd/conf.d/nagios.conf,其内容如下:

    ScriptAlias /nagios/cgi-bin "/usr/local/globle/softs/monitor/nagios/4.4.1/sbin"
    <Directory "/usr/local/globle/softs/monitor/nagios/4.4.1/sbin">
        Options ExecCGI
        AllowOverride None
       <IfVersion >= 2.3>
            <RequireAll>
                Require all granted
                AuthName "Nagios Access"
                AuthType Basic
                AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
                Require valid-user
             </RequireAll>
        </IfVersion>
        <IfVersion < 2.3>
            Order allow,deny
            Allow from all
            AuthName "Nagios Access"
            AuthType Basic
            AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
            Require valid-user
        </IfVersion>
    </Directory>
    
    Alias /nagios "/usr/local/globle/softs/monitor/nagios/4.4.1/share"
    <Directory "/usr/local/globle/softs/monitor/nagios/4.4.1/share">
        Options None
        AllowOverride None
        IfVersion >= 2.3>
        <RequireAll>
            Require all granted
            AuthName "Nagios Access"
            AuthType Basic
            AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
            Require valid-user
        </RequireAll>
        </IfVersion>
        <IfVersion < 2.3>
            Order allow,deny
            Allow from all
            AuthName "Nagios Access"
            AuthType Basic
            AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
            Require valid-user
        </IfVersion>
    </Directory>

    创建站点认证
    nagios站点登陆有一个角色认证的过程。
    执行命令:htpasswd -c /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users nagiosadmin,输入两次密码
    生成nagiosadmin的管理员认证文件/usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
    在访问Nagios监控站点时,需要输入nagiosadmin和其密码

    访问站点
    上面的过程,已经部署了nagios监控系统,并且启动了nagios服务,因此可以通过浏览器来访问nagios监控站点。
    访问:http://192.168.80.8/nagios (本篇博客访问http://localhost/nagios

    本篇博客因为使用了win10的Edge浏览器访问VMware workstation虚拟机的站点,因为Edge安全机制,拒绝访问。
    因此需要将虚拟机console的80端口映射到宿主机的win10系统中。具体映射操作参考博客《》

    输入nagiosadmin和密码后,报错
    信息如下:
    You don't have permission to access /nagios/ on this server
    出现这种情况的原因很多。本人在检索了网上的教程之后,定位为虚拟机console未安装php环境导致
    执行命令:yum -y install php,此过程会自动创建php的http配置,路径在/etc/httpd/conf.d/php.conf
    然后重启httpd服务:service httpd restart,此时再次访问nagios监控站点即可。

    3. 部署Nagios-plugin

    在第二部分中,已经部署了nagios监控服务,也能够访问监控站点。但是访问时的现象如下:

    从截图的错误提示看出,此时并没有监控插件(可以通过查看/usr/local/globle/softs/monitor/nagios/4.4.1/libexec目录内容确认)。
    因此需要继续编译nagios-plugin

    3.1 编译安装nagios-plugin

    第二部分中已经创建了nagios相关的用户组。这部分在编译安装nagios-plugin时可以不在重复。

    解压
    执行命令解压:
    tar -zxvf nagios-plugins-2.1.2.tar.gz -C /tmp/
    cd /tmp/nagios-plugins-2.1.2/

    编译安装
    执行以下命令:
    ./configure --prefix=/usr/local/globle/softs/monitor/nagios/4.4.1/
    make
    make install
    结束之后,在/usr/local/globle/softs/monitor/nagios/4.4.1/libexec目录下,能够看到已经安装了很多插件

    站点访问
    此时站点上已经恢复正常,截图如下:

    4. Nagios功能配置

    本文第2部分主要介绍nagios-core的编译安装和运行,第3部分介绍了nagios-plugin的编译安装。上述这些工作仅仅是最基本的操作,即部署。
    本文第4部分将会开始配置nagios的监控对象,已经其他功能的实现。

    4.1 配置监控对象

    4.1.1 监控本质

    配置nagios监控的困难之处,可能在于监控对象的配置。其实一旦理解了监控报警本质,对于nagios的配置就会豁然开朗。
    所谓监控报警,本人理解主要有四个部分:监测,控制,报警,通知
    一个优秀的监控报警系统,至少要包括这四部分内容。

    监测
    监测很容易理解。
    我需要监测的主机对象,如Linux主机,window主机,交换机,路由器,打印机等主机或者网络设备;我也想监测服务对象,比如DNS服务,HTTP服务,DB服务等业务
    据此不难看出,nagios把所有的监控目标定义未监控对象,通过配置文件来实现用户定义,如hosts.conf来定义主机对象,通过service.conf来定义服务对象
    当然,主机或者服务,都不是单独存在的,他们之间有重复的部分,也有独立的部分,也可能存在逻辑关系等。

    控制
    管理的基础就是能够控制。无论是通过命令行或者CGI等方式,都需要提供一个远程控制的功能,来应对报警,异常,故障等发生时的管理和维护方式。

    报警
    报警是监控系统最基本的功能。报警的方式有很多,实时的,或者延迟的。报警有阈值,有策略等。即监控对象在什么情况下会报警,报警后报告给谁等。
    报警的方式有很多种,声音,图像,邮件,短信,微信等。目的是把异常或者故障消息,发送给管理员。

    通知
    这里的通知,偏重于通知方式和时间,手段等。

    总而言之,nagios的对象定义,是颗粒话的,用一句话总结就是:
    在什么时刻或者时间段内,对什么主机或者服务进行监控,当达到什么阈值之后 ,以什么方式在什么时间段内,报告给什么人

    4.1.2 配置监控主机

    本部分在主要是配置监控对象,示例为配置nagios监控kvm虚拟机node11。

    具体的nagios各类配置文件作用及参数详解,参见博客《Nagios配置文件详解.md》,
    博客园地址:https://www.cnblogs.com/liwanliangblog/p/9267672.html

    创建配置目录
    这里希望把用户自定义的监控对象与系统分开。
    进入nagios对象配置目录:cd /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects
    创建用户自定义配置目录:mkdir knodes

    将用户自定义配置目录添加在主配置文件nagios.cfg
    编辑主配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/nagios.cfg
    添加cfg_dir指令:cfg_dir=/usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/knodes,保存退出

    创建node11对象配置文件
    进入到用户自定义配置目录:cd /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/knodes/
    创建node11的对象配置文件:touch node11.cfg,node11.cfg中,对node11要监控的内容进行定义:

    # 主机定义
    define host {
        use linux-server
        host_name node11
        alias node11
        address 192.168.80.11
    }
    # 服务定义
    define service {
        use local-service ; Name of service template to use
        host_name node11
        service_description Root Partition
        check_command check_nrpe!check_disk
        notifications_enabled 1
    }
    define service {
        use local-service ; Name of service template to use
        host_name node11
        service_description Current Users
        check_command check_nrpe!check_users
        notifications_enabled 1
    }
    
    define service {
        use local-service ; Name of service template to use
        host_name node11
        service_description Total Processes
        check_command check_nrpe!check_total_procs
        notifications_enabled 1
    }

    注:node11.cfg中,对node11服务的监测,采用了check_nrpe远程插件。这个在下文【4.3 配置远程监控】中讨论

    编辑node11.cfg之后,保存退出。
    通过service nagios configtest检查nagios配置文件是否正确,通过service nagios reload重新加载nagios服务进程。
    此时便可通过web监控站点,访问已经被监控的node11,如下图:

    4.2 配置报警方式

    nagios有很多报警方式,最基本的就是图形化报警,还有声音,邮件,短信等方式。
    图形化是默认的报警方式,这里不做介绍。主要配置声音和邮件报警

    4.2.1 配置声音报警

    拷贝报警音频至站点多媒体目录
    配置声音报警,需要将报警声音音频文件上传值站点下,本篇博客中nagios存放多媒体的路径为:
    /usr/local/globle/softs/monitor/nagios/4.4.1/share/media,将报警声音文件warn.wav拷贝至该目录

    修改配置文件
    此时还需要修改CGI配置文件,使得web真的能够进行声音报警。
    在/usr/local/globle/softs/monitor/nagios/4.4.1/etc/cgi.cfg的328行左右,将内容修改如下:

    host_unreachable_sound=warn.wav
    host_down_sound=warn.wav
    service_critical_sound=warn.wav
    service_warning_sound=warn.wav
    service_unknown_sound=warn.wav

    注:normal_sound这一样默认注释,不做修改

    重启服务
    执行service nagios reloadservice httpd restart重启服务,然后刷新网页即可听见报警声。

    修改网页刷新频率
    在nagios监控站点看到网页的刷新频率是90s。如下图:

    这个时间间隔可以在cgi.cfg中修改,以便使用不同规模的集群监控和报警程度。本篇博客修改为10s。操作如下:
    修改配置文件:/usr/local/globle/softs/monitor/nagios/4.4.1/etc/cgi.cfg
    将refresh_rate=90修改为refresh_rate=10,保存退出
    执行service nagios reload重新加载配置,结果如下图:

    4.2.2 配置邮件报警

    配置邮件报警没有其他两种方式及时,但是可以作为故障备案和统计,也是非常必要的。主要是在nagios监控服务器上,配置mail客户端。通过mail客户端能否发送邮件,便可配置nagios发送邮件。本部分主要是在Linux配置了mail能够发送邮件的基础上,配置nagios发送邮件报警。

    配置Linux通过mail发送邮件,参阅博客《Linux配置mail客户端发送邮件.md
    博客园地址:https://www.cnblogs.com/liwanliangblog/p/9276606.html

    添加收件邮箱至联系人
    编辑配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/contacts.cfg
    添加以下内容后,保存退出:

    define contact {
        contact_name liwanliang
        use generic-contact
        alias 值班员
        email yunweinote@126.com
    }
    define contactgroup {
        contactgroup_name monitorer
        alias 值班组
        members liwanliang
    }

    修改模板配置,添加新的联系组
    因为上面的contact中,重新定义了一个contact和contactgroup,且不属于nagios默认配置的admins组,因此需要在模板中添加联系人组。
    修改配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/templates.cfg
    将contact_groups后面的选项,由admins,修改为monitorer,保存退出

    define host {
        name linux-server 
        use generic-host
        check_period 24x7
        #check_interval 5 ; Actively check the host every 5 minute
        check_interval 1 
        retry_interval 1
        #max_check_attempts 10
        max_check_attempts 3
        check_command check-host-alive
        notification_period workhours 
        notification_interval 120
        notification_options d,u,r
        #contact_groups admins
        contact_groups monitorer
        register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
    }
    
    define service {
        name generic-service
        active_checks_enabled 1
        passive_checks_enabled 1
        parallelize_check 1
        obsess_over_service 1 
        check_freshness 0
        notifications_enabled 1
        event_handler_enabled 1 
        flap_detection_enabled 1
        process_perf_data 1
        retain_status_information 1
        retain_nonstatus_information 1
        is_volatile 0
        check_period 24x7
        max_check_attempts 3 
        #check_interval 10 
        check_interval 5 
        retry_interval 2
        #contact_groups admins
        contact_groups monitorer
        notification_options w,u,c,r
        notification_interval 60
        notification_period 24x7 
        register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
    }

    修改邮件发送命令
    默认采用sendmail命令来定义发送邮件的命令。这里修改为mail。具体操作如下:

    define command {
        command_name notify-host-by-email
        #command_line /usr/bin/printf "%b" "***** Nagios *****
    
    Notification Type: $NOTIFICATIONTYPE$
    Host: $HOSTNAME$
    State: $HOSTSTATE$
    Address: $HOSTADDRESS$
    Info: $HOSTOUTPUT$
    
    Date/Time: $LONGDATETIME$
    " | /usr/sbin/sendmail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        command_line /usr/bin/printf "%b" "***** Nagios *****
    
    Notification Type: $NOTIFICATIONTYPE$
    Host: $HOSTNAME$
    State: $HOSTSTATE$
    Address: $HOSTADDRESS$
    Info: $HOSTOUTPUT$
    
    Date/Time: $LONGDATETIME$
    " | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
    }
    define command {
        command_name notify-service-by-email
        #command_line /usr/bin/printf "%b" "***** Nagios *****
    
    Notification Type: $NOTIFICATIONTYPE$
    
    Service: $SERVICEDESC$
    Host: $HOSTALIAS$
    Address: $HOSTADDRESS$
    State: $SERVICESTATE$
    
    Date/Time: $LONGDATETIME$
    
    Additional Info:
    
    $SERVICEOUTPUT$
    " | /usr/sbin/sendmail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        command_line /usr/bin/printf "%b" "***** Nagios *****
    
    Notification Type: $NOTIFICATIONTYPE$
    
    Service: $SERVICEDESC$
    Host: $HOSTALIAS$
    Address: $HOSTADDRESS$
    State: $SERVICESTATE$
    
    Date/Time: $LONGDATETIME$
    
    Additional Info:
    
    $SERVICEOUTPUT$
    " | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert:$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    }

    修改服务检查时间间隔
    因为nagios报警是有策略的,不会在第一次监测到异常就会报警。因此需要设定最大尝试次数和每次之间的时间间隔。
    这些都可以在模板配置文件/usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/templates.cfg修改

    注:需要根据业务需求,或者集群大小等做对应的修改

    本篇博客修改内容见本篇上述【修改配置模板,添加新的联系组】
    注意:要配置发送通知,还需要为node11的services监控,添加notifications_enabled 1选项,否则不会发送通知

    重启服务
    执行命令:service nagios reload,重新加载配置

    4.3 配置远程监控

    Nagios的远程控制通过NRPE插件实现。NRPE是 Nagios Remote Plugin Executor的缩写。

    4.3.1 下载NRPE插件

    本篇博客安装了两个版本的NRPE。一个是nrpe.2.15,一个是nrpe.3.3.1。

    下载地址:https://sourceforge.net/projects/nagios/files/

    4.3.2 解压安装

    执行命令:tar -zxvf nrpe-2.15.tar.gz -C /tmp
    进入到目录:cd /tmp/nrpe-2.15
    执行以下命令:

    configure

    ./configure 
     --prefix=/usr/local/globle/softs/monitor/nagios/nrpe/2.15/ 
    --sysconfdir=/usr/local/globle/softs/monitor/nagios/nrpe/2.15/etc 
    --localstatedir=/var 
    --with-dist-type=rh 
    --with-init-type=sysv 
    --with-inetd-type=xinetd

    make
    执行命令:make all

    make install
    执行命令:
    make install-plugin,安装nrpe插件check_nrpe;
    make install-daemon,安装启动进程;
    make install-daemon-config,安装nrpe.cfg配置文件
    make install-xinetd,安装/etc/xinet.d/nrpe文件

    注:nrpe2.15的安装可以在解压后的源码的README.md中获取,README.md中也指出在docs/NRPE.pdf中也有安装指导手册

    4.3.3 配置nrpe

    配置nrpe的过程比较简单
    修改/etc/xinetd.d/npre
    因为这里使用超级管理进程xinetd来接管nrpe,以便减轻监控节点的负载。因此需要在xinetd.d下配置nrpe。
    配置的/etc/xinetd.d/nrpe内容如下:

    service nrpe
    {
            flags = REUSE
            socket_type = stream
            port = 5666
            wait = no
            user = nagios
            group = nagios
            server = /usr/local/globle/softs/monitor/nagios/nrpe/2.15//bin/nrpe
            server_args = -c /usr/local/globle/softs/monitor/nagios/nrpe/2.15/etc/nrpe.cfg --inetd
            log_on_failure += USERID
            disable = no
            only_from = 127.0.0.1 192.168.80.8
    }

    启动xinetd
    编辑配置文件vim /etc/services,在最有一行添加如下内容,保存退出:

    nrpe           5666/tcp           # nrpe

    上面内容配置完成之后,执行命令service xinetd restart,启动xinetd服务,并通过netstat -tupln | grep 5666 检查nrpe的5666端口是否已经监听

    配置nrpe.conf
    nrpe.conf是nrpe服务读取的配置文件,主要涉及check_commod的配置。
    本篇博客中,nrpe.2.15的nrpe.cfg配置如下:

    log_facility=daemon
    log_file=/var/nrpe.log
    debug=1
    pid_file=/var/nrpe.pid
    server_port=5666
    nrpe_user=nagios
    nrpe_group=nagios
    allowed_hosts=127.0.0.1,::1
    dont_blame_nrpe=0
    allow_bash_command_substitution=0
    command_timeout=60
    connection_timeout=300
    command[check_users]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_users -w 5 -c 10
    command[check_load]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_load -r -w .15,.10,.05 -c .30,.25,.20
    command[check_hda1]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_disk -w 20% -c 10% -p /dev/hda1
    command[check_zombie_procs]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_procs -w 5 -c 10 -s Z
    command[check_total_procs]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_procs -w 150 -c 200

    上述内容中,主要修改的地方就是command,将其修改为nagios的libexec目录,否则会执行报错
    最后,在nagios的command.cfg中创建check_nrpe命令即可

    4.4 配置window主机监控

    4.5 配置数据库存储

    4.5.1 NDOMOD.o事件中断模块

    Nagios数据导出插件NDOUtils插件(Nagios Data Output Utils),提供了将Nagios配置和告警信息导出的功能。
    这个插件提供事件中断(event broker)模块(NDOMOD.o),从Nagios获取数据,然后将数据通输入到存储。
    可使用的存储有:

    • File
    • DB

    可使用发送数据的方式包括:

    • File2Sock
    • Unix Socket
    • Tcp Socket

    4.5.2 Nagios配置NDOUtils插件

    本部分参阅博客《Nagios数据存储插件NDOUtils的部署和测试.md
    博客园地址:https://www.cnblogs.com/liwanliangblog/p/9278872.html

    4.6 配置历史数据图形化

    【**************************************千里之行,始于足下**************************************】
     
     
    https://www.cnblogs.com/liwanliangblog/p/9266772.html#top
  • 相关阅读:
    MYSQL/HIVESQL笔试题(一):HIVESQL(一)分组求TopN/行转列/列转行
    ALINK(七):ALINK使用技巧(二)
    Hive实战(6):完整案例(二)业务分析
    Hive实战(5):完整案例(一)准备
    Mysql基础(二十四):数据类型/常见约束
    Mysql基础(二十三):视图/存储过程
    数据可视化基础专题(三十四):Pandas基础(十四) 分组(二)Aggregation/apply
    Daily Coding Problem: Problem #677
    1027. Longest Arithmetic Subsequence (Solution 1)
    346. Moving Average from Data Stream
  • 原文地址:https://www.cnblogs.com/xuefy/p/11550723.html
Copyright © 2011-2022 走看看