• 企业级zabbix监控搭建及邮件报警


    Zabbix简介

     

    Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持。Zabbix 是一个企业级的分布式开源监控方案。Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。官方网站:http://www.zabbix.com/     

    Zabbix支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。适当的配置后,Zabbix可以在IT基础架构监控方面扮演重要的角色。对于只有少量服务器的小型组织和拥有大量服务器的大型公司也同样如此。

    Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的,可供公众任意使用。

    zabbix中的名词解释

     

    主机 (host):一台你想监控的网络设备,用IP或域名表示

    主机组 (host group):主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。

    监控项 (item):你想要接收的主机的特定数据,一个度量数据。

    触发器 (trigger):一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式。当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。

    事件 (event):单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册

    异常 (problem):一个处在“异常”状态的触发器

    动作 (action):一个对事件做出反应的预定义的操作。一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成

    升级 (escalation):一个在动作内执行操作的自定义场景; 发送通知/执行远程命令的序列

    媒介 (media):发送告警通知的手段;告警通知的途径

    通知 (notification):利用已选择的媒体途径把跟事件相关的信息发送给用户

    远程命令 (remote command):一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令

    模版 (template):一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合。模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。

    应用 (application):一组监控项组成的逻辑分组

    web 场景 (web scenario):利用一个或多个HTTP请求来检查网站的可用性

    前端 (frontend):Zabbix提供的web界面

    Zabbix API:Zabbix API允许你使用JSON RPC协议来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务

    Zabbix server:Zabbix软件实现监控的核心程序,主要功能是与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等

    Zabbix agent:一个部署在监控对象上的,能够主动监控本地资源和应用的程序

    Zabbix proxy:一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序

    Zabbix 主要特点

    安装与配置简单,学习成本低 支持多语言(包括中文) 免费开源 自动发现服务器与网络设备分布式监视以及 WEB 集中管理功能 可以无 agent 监视 用户安全认证和柔软的授权方式 通过 WEB 界面设置或查看监视结果 email 等通知功能

    Zabbix主要功能

    监控CPU负载、内存使用、磁盘使用、网络状态、端口监视、日志监视、插件开发自定义

    Zabbix运行机制

    Zabbix Server 和 Zabbix agent

    Zabbix Server 可以通过 SNMP,Zabbix agent,Ping,端口监视等你方法提供对远程服务器/网络状态的 监视,数据收集功能,可以在运行 Linux,Solaris,HP-UX,AIX,FreeBSD,OpenBSD,OX X,Windows 多 平台。

    Zabbix Agent 安装在需要被监控的目标服务器上,主要完成对硬件信息与操作系统有关的内存,CPU 等你 信息收集。

    Zabbix Server 可以单独监视远程服务器的服务状态,同时也可以与 Zabbix Agent 结合。可以轮询 Zabbix Agent 主动接收监视数据(trapping 传递 方式),同时还可以被动接收 Zabbix Agent 发送的数据。

    Zabbix运行过程图

    Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持。Zabbix 是一个企业级的分布式开源监控方案。Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。官方网站:http://www.zabbix.com/     

    Zabbix支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。适当的配置后,Zabbix可以在IT基础架构监控方面扮演重要的角色。对于只有少量服务器的小型组织和拥有大量服务器的大型公司也同样如此。

    Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的,可供公众任意使用。

    zabbix中的名词解释

     

    主机 (host):一台你想监控的网络设备,用IP或域名表示

    主机组 (host group):主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。

    监控项 (item):你想要接收的主机的特定数据,一个度量数据。

    触发器 (trigger):一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式。当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。

    事件 (event):单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册

    异常 (problem):一个处在“异常”状态的触发器

    动作 (action):一个对事件做出反应的预定义的操作。一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成

    升级 (escalation):一个在动作内执行操作的自定义场景; 发送通知/执行远程命令的序列

    媒介 (media):发送告警通知的手段;告警通知的途径

    通知 (notification):利用已选择的媒体途径把跟事件相关的信息发送给用户

    远程命令 (remote command):一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令

    模版 (template):一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合。模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。

    应用 (application):一组监控项组成的逻辑分组

    web 场景 (web scenario):利用一个或多个HTTP请求来检查网站的可用性

    前端 (frontend):Zabbix提供的web界面

    Zabbix API:Zabbix API允许你使用JSON RPC协议来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务

    Zabbix server:Zabbix软件实现监控的核心程序,主要功能是与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等

    Zabbix agent:一个部署在监控对象上的,能够主动监控本地资源和应用的程序

    Zabbix proxy:一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序

    Zabbix 主要特点

    安装与配置简单,学习成本低 支持多语言(包括中文) 免费开源 自动发现服务器与网络设备分布式监视以及 WEB 集中管理功能 可以无 agent 监视 用户安全认证和柔软的授权方式 通过 WEB 界面设置或查看监视结果 email 等通知功能

    Zabbix主要功能

    监控CPU负载、内存使用、磁盘使用、网络状态、端口监视、日志监视、插件开发自定义

    Zabbix运行机制

    Zabbix Server 和 Zabbix agent

    Zabbix Server 可以通过 SNMP,Zabbix agent,Ping,端口监视等你方法提供对远程服务器/网络状态的 监视,数据收集功能,可以在运行 Linux,Solaris,HP-UX,AIX,FreeBSD,OpenBSD,OX X,Windows 多 平台。

    Zabbix Agent 安装在需要被监控的目标服务器上,主要完成对硬件信息与操作系统有关的内存,CPU 等你 信息收集。

    Zabbix Server 可以单独监视远程服务器的服务状态,同时也可以与 Zabbix Agent 结合。可以轮询 Zabbix Agent 主动接收监视数据(trapping 传递 方式),同时还可以被动接收 Zabbix Agent 发送的数据。

    Zabbix运行过程图

    Zabbix 支持多种网络方式下的监控,可以通过分布式的部署和安装监控代理 Zabbix,通过 C/S 模式采集数据,通过 B/S 模式在 Web 端展示和配置!Agent 监控端口 10050

    服务端安装 Zabbix Server 和 Zabbix Agent 两个服务,客户端只安装 Zabbix Agent 一个服务,监控原理 就是 Zabbix Agent 服务将从系统中获取的相关数据传送给 Zabbix Server,然后 Zabbix Server 服务奖数据分 析之后以 PHP 页面展示出来!

    Zabbix部署

    硬件环境准备

    角色

    主机名/域名

    IP地址

    服务

    备注

    服务器

    Server

    192.168.1.10/24

     

     

     

    软件环境准备

    软件名称

    类型

    版本

    备注

    CentOS

    操作系统

    7.0或以上版本

     

     

    服务器网络配置、主机名、防火墙以及selinux状态如下

    #首先给节点做hosts的IP映射
    [root@zabbix-server ~]# vim /etc/hosts
    192.168.1.10 zabbix-server
    #添加yum在线源和epel源
    [root@zabbix-server ~]# yum -y install wget
    [root@zabbix-server ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    #在机器上安装ntpdate,然后做NTP时间同步服务器
    [root@zabbix-server ~]# yum -y install ntpdate
    [root@zabbix-server ~]# ntpdate ntp1.aliyun.com
    7 Apr 00:31:45 ntpdate[7470]: step time server 120.25.115.20 offset -28792.199899 sec
    [root@zabbix-server ~]# date
    2020年 04月 07日 星期二 00:31:50 CST
    #中心计划任务每五分钟执行一次更新阿里时间服务器
    [root@zabbix-server ~]# crontab -e
    */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1
    #准备部署zabbix服务,安装一些zabbix必要的组件和服务
    [root@zabbix-server ~]# yum -y install httpd mariadb mariadb-devel mariadb-server php-mbstring php-bcmath php-gd php-xmlrpc php-ldap php-xml libevent libevent-devel net-snmp net-snmp-devel libxml2 libxml2-devel libcurl-devel
    #测试是否安装成功
    [root@zabbix-server ~]# echo $?
    0
    #后期有可能用到tomcat,所以要部署JDK环境
    [root@zabbix-server ~]# ls
    anaconda-ks.cfg jdk-8u60-linux-x64.tar.gz
    [root@zabbix-server ~]# tar xf jdk-8u60-linux-x64.tar.gz
    [root@zabbix-server ~]# mv jdk1.8.0_60/ /usr/local/java
    [root@zabbix-server ~]# vim /etc/profile.d/java.sh
    export JAVA_HOME=/usr/local/java
    export CLASSPATH=$JAVA_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin
    [root@zabbix-server ~]# . /etc/profile.d/java.sh
    [root@zabbix-server ~]# java -version
    java version "1.8.0_60"
    Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
    Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
    #源码安装zabbix服务端
    [root@zabbix-server ~]# ls
    anaconda-ks.cfg zabbix-3.4.3.tar.gz
    [root@zabbix-server ~]# tar xf zabbix-3.4.3.tar.gz -C /usr/local/src/
    [root@zabbix-server ~]# cd /usr/local/src/zabbix-3.4.3/
    [root@zabbix-server zabbix-3.4.3]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --enable-java && make -j2 && make install
    [root@zabbix-server zabbix-3.4.3]# echo $?
    0
    #启动mariadb和加入开机自启动
    [root@zabbix-server ~]# systemctl start mariadb
    [root@zabbix-server ~]# systemctl enable mariadb
    #重置mariadb数据库,设置密码为123123
    [root@zabbix-server ~]# mysql_secure_installation
    # 进入mariadb数据库,创建zabbix用户和数据库
    [root@zabbix-server ~]# mysql -uroot -p123123
    MariaDB [(none)]> create database zabbix character set utf8;
    MariaDB [(none)]> grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
    #此步骤是为zabbix授权192.168.1.10否则无法启动server端
    MariaDB [(none)]> grant all on zabbix.* to zabbix@192.168.1.10 identified by 'zabbix';
    MariaDB [(none)]> flush privileges;
    #把zabbix自带的数据导入mysql的zabbix数据库
    [root@zabbix-server zabbix-3.4.3]# cd database/
    [root@zabbix-server database]# ls
    ibm_db2 Makefile.am mysql postgresql
    Makefile Makefile.in oracle sqlite3
    [root@zabbix-server database]# mysql -uzabbix -pzabbix zabbix < mysql/schema.sql
    [root@zabbix-server database]# mysql -uzabbix -pzabbix zabbix < mysql/images.sql
    [root@zabbix-server database]# mysql -uzabbix -pzabbix zabbix < mysql/data.sql
    #登陆mysql数据库查看是否导入成功
    [root@zabbix-server ~]# mysql -uroot -p123123
    MariaDB [(none)]> use zabbix;
    MariaDB [zabbix]> show databases;
    结果发现已经有好多数据被导入进来了!
    #创建zabbix用户
    [root@zabbix-server ~]# useradd -M -s /sbin/nologin zabbix
    [root@zabbix-server ~]# chown -R zabbix:zabbix /usr/local/zabbix/
    [root@zabbix-server ~]# cd /usr/local/zabbix/
    #创建一个放日志的目录,并且加入zabbix用户和用户组
    [root@zabbix-server zabbix]# mkdir log
    [root@zabbix-server zabbix]# ll -d log/
    drwxr-xr-x 2 root root 6 4月 7 01:36 log/
    [root@zabbix-server zabbix]# chown -R zabbix:zabbix log/
    #备份zabbix配置文件,并配置
    [root@zabbix-server ~]# cd /usr/local/src/zabbix-3.4.3/conf
    #源码装的zabbix需要从源码包里边复制配置文件出来
    [root@zabbix-server conf]# mkdir -pv /usr/local/zabbix/etc/
    [root@zabbix-server conf]# mv zabbix_server.conf /usr/local/zabbix/etc/
    [root@zabbix-server conf]# mv zabbix_agentd.conf /usr/local/zabbix/etc/
    [root@zabbix-server conf]# cd /usr/local/zabbix/etc/
    [root@zabbix-server etc]# ls
    zabbix_agentd.conf zabbix_server.conf
    zabbix_agentd.conf.d zabbix_server.conf.d
    [root@zabbix-server etc]# cp -p zabbix_server.conf zabbix_server.conf.bak
    [root@zabbix-server etc]# cp -p zabbix_agentd.conf zabbix_agentd.conf.bak
    #过滤#号注释和空行简化配置文件
    [root@zabbix-server etc]# egrep -v "^#|^$" zabbix_server.conf.bak > zabbix_server.conf
    [root@zabbix-server etc]# vim zabbix_server.conf
    LogFile=/usr/local/zabbix/log/zabbix_server.log //指定zabbix日志位置
    DBHost=192.168.1.10 //指定数据库主机
    DBName=zabbix //指定数据库名为zabbix
    DBUser=zabbix //指定用户为zabbix
    DBPassword=zabbix //指定密码为zabbix
    PidFile=/usr/local/zabbix/log/zabbix_server.pid //指定zabbix的pid文件位置
    DBSocket=/var/lib/mysql/mysql.sock //指定mysql的sock文件
    Include=/usr/local/zabbix/etc/zabbix_server.conf.d/*.conf //指定包含的配置文件
    [root@zabbix-server etc]# egrep -v "^#|^$" zabbix_agentd.conf.bak > zabbix_agentd.conf
    [root@zabbix-server etc]# vim zabbix_agentd.conf
    LogFile=/usr/local/zabbix/log/zabbix_agentd.log
    Server=127.0.0.1,192.168.1.10
    ServerActive=192.168.1.10
    Hostname=zabbix-server
    PidFile=/usr/local/zabbix/log/zabbix_agentd.pid
    Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
    #为zabbix启动脚本创建软链接
    [root@zabbix-server ~]# ln -s /usr/local/zabbix/sbin/* /usr/local/bin/
    #移动zabbix的网站源码到Apache访问目录
    [root@zabbix-server ~]# mv /usr/local/src/zabbix-3.4.3/frontends/php/ /var/www/html/zabbix
    #给apache加入用户和用户组
    [root@zabbix-server ~]# chown -R apache:apache /var/www/html/zabbix/
    [root@zabbix-server ~]# vim /etc/php.ini
    211 short_open_tag = On
    384 max_execution_time = 300
    394 max_input_time = 300
    672 post_max_size = 32M
    846 extension=bcmath.so
    878 date.timezone = Asia/Shanghai
    #编辑一下Apache的配置文件
    [root@zabbix-server ~]# vim /etc/httpd/conf/httpd.conf

    ServerName www.example.com:80
    DirectoryIndex index.html index.php
    AddType application/x-httpd-php .php

     


    #添加PHP相关组件
    [root@zabbix-server html]# yum install php php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
    #启动Apache服务,并加入开机自启
    [root@zabbix-server ~]# systemctl start httpd
    [root@zabbix-server ~]# systemctl enable httpd
    #启动zabbix的server端和agent端
    [root@zabbix-server ~]# zabbix_server
    [root@zabbix-server ~]# zabbix_agentd
    #查看Apache是否启动
    [root@zabbix-server ~]# netstat -antup|grep 80
    tcp 0 36 192.168.1.10:22 192.168.1.2:5468 ESTABLISHED 7409/sshd: root@pts
    tcp6 0 0 :::80 :::* LISTEN 35146/httpd
    #查看server端
    [root@zabbix-server ~]# netstat -antup|grep 10051
    tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 7408/zabbix_server
    tcp6 0 0 :::10051 :::* LISTEN 7408/zabbix_server
    #查看agent端
    [root@zabbix-server ~]# netstat -antup|grep 10050
    tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 35167/zabbix_agentd
    tcp6 0 0 :::10050 :::* LISTEN 35167/zabbix_agentd
    #网页访问http://192.168.1.10/zabbix安装zabbix

     

    zabbix切换中文界面

     

     

    配置邮箱报警

     #配置163邮箱开始获取授权码

    #下载mailx邮件服务和dos2unix防止乱码

    [root@zabbix-server ~]# yum -y install mailx dos2unix

    [root@zabbix-server ~]# mail -V

    12.5 7/5/10

    [root@zabbix-server ~]# vim /etc/mail.rc

    //末尾添加这四段配置

    1 set bsdcompat
    2 set from=88888888@163.com smtp=smtp.163.com
    3 set smtp-auth-user=88888888@163.com smtp-auth-password=WLJKHGXGOIDZJWGBF      //163邮箱申请的授权码
    4 set smtp-auth=login

     

    #测试给自己发一封邮件

    [root@zabbix-server ~]# echo "test mail"|mail -s "test" 88888888@163.com

    效果如下:

     

    #编辑zabbix_server.conf引用邮件脚本

    [root@zabbix-server ~]# vim /usr/local/zabbix/etc/zabbix_server.conf

    AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts

    [root@zabbix-server ~]# cd /usr/local/zabbix/share/zabbix/alertscripts/

    [root@zabbix-server alertscripts]# vim mail.sh

     1 #!/bin/bash
     2 
     3 #Author:GaoHongYu
     4 
     5 #QQ:1061767621
     6 
     7 #Time:2020-04-12 16:23:02
     8 
     9 #Name:mail.sh
    10 
    11 #Version:V1.0
    12 
    13 bt=$2
    14 
    15 sjr=$1
    16 
    17 FILE=/tmp/mailtmp.txt
    18 
    19 echo "$3" > $FILE
    20 
    21 /usr/bin/dos2unix -k $FILE
    22 
    23 /bin/mail -s "$bt" "$sjr" <$FILE 

     

    [root@zabbix-server alertscripts]# chmod 777 mail.sh

    [root@zabbix-server alertscripts]# chown zabbix:zabbix mail.sh

    [root@zabbix-server alertscripts]# touch /tmp/mailtmp.txt

    [root@zabbix-server alertscripts]# chmod 777 /tmp/mailtmp.txt

    [root@zabbix-server alertscripts]# chown zabbix:zabbix /tmp/mailtmp.txt

    #测试脚本能否使用

    [root@zabbix-server alertscripts]# ./mail.sh svipghy@163.com "test" "test"

    效果如下:

     

     

    #zabbix中添加报警类型

    //添加三个脚本参数
    {ALERT.SENDTO}
    {ALERT.SUBJECT}
    {ALERT.MESSAGE}

     

    故障告警:

    故障{TRIGGER.STATUS},服务器名:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

    告警主机:{HOSTNAME}

    告警主机IP地址:{HOST.IP}

    告警时间:{EVENT.DATE} {EVENT.TIME}

    告警等级:{TRIGGER.SEVERITY}

    告警信息: {TRIGGER.NAME}

    告警项目:{TRIGGER.KEY1}

    问题详情:{ITEM.NAME}:{ITEM.VALUE}

    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

    事件ID:{EVENT.ID}

    恢复操作:

    恢复{TRIGGER.STATUS}, 服务器名:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

    告警主机:{HOSTNAME}

    告警主机IP地址:{HOST.IP}

    告警时间:{EVENT.DATE} {EVENT.TIME}

    告警等级:{TRIGGER.SEVERITY}

    告警信息: {TRIGGER.NAME}

    告警项目:{TRIGGER.KEY1}

    问题详情:{ITEM.NAME}:{ITEM.VALUE}

    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

    事件ID:{EVENT.ID}

    确认操作:

    确认{TRIGGER.STATUS}, 服务器名:{HOSTNAME1}: {TRIGGER.NAME}已确认!

    告警主机:{HOSTNAME}

    告警主机IP地址:{HOST.IP}

    告警时间:{EVENT.DATE} {EVENT.TIME}

    告警等级:{TRIGGER.SEVERITY}

    告警信息: {TRIGGER.NAME}

    告警项目:{TRIGGER.KEY1}

    问题详情:{ITEM.NAME}:{ITEM.VALUE}

    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

    事件ID:{EVENT.ID}

     

     

     

     

     

     

     测试报警

    测试报警这里就不演示步骤了,直接上效果!

    小编撰写不易,希望转载注明出处,如需要更深入的交流探讨,可以来博客小站交流:www.krzyw.cn

     

     

  • 相关阅读:
    C# 控件,MenuStrip,statusStrip,contextMenuStrip,ImageList, Listview,MonthCalendar、DataGridView,combobox,textbox,DateTimePicker,treeview,picturebox、toolStrip,radioButton,TableLayoutPanel,numericUpDown
    c# 数据库操作,多数据库操作、数据库操作异常报错等问题
    Jquery 选择器的写法, selector
    C# 一、语法结构、注释、命名空间、Main入口点、变量与常量、运算符、流程控制(循环)
    c# 项目文件,C#viual studio使用方法
    finereport Web工具栏
    C# 学习笔记
    c# public private protected internal protected internal
    js Object.prototype.hasOwnProperty() 与 for in 区别
    js 对象的深克隆
  • 原文地址:https://www.cnblogs.com/gaohongyu/p/12690735.html
Copyright © 2020-2023  润新知