Zabbix(四)

Zabbix Proxy

zabbix作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据,然后由zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替zabbix server收集监控数据,然后把数据汇报给zabbix server,所以zabbix proxy可以在一定程度上分担了zabbix server的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。

zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警。所以最终导致告警延时可能会比较长。

使用场景

监控远程区域设备,尤其是多机房和多个云环境时

监控网络不稳定区域,避免跨网段监控的告警不及时

当需要监控设备众多时,使用它来减轻 Zabbix Server 的压力

简化分布式监控的维护,无需各位创建 Zabbix Server,统一管理策略

Zabbix Server和Zabbix Proxy

工作模式

以proxy角度区分主动被动。

proxy的主动被动和agent主动被动没有关系。

主动模式(推荐)

主动地向zabbix server周期性的申请获取zabbix agent的监控项信息,此模式可以大幅降低Zabbix Server的压力。

被动模式

被动地等待zabbix server的连接,并接受zabbix server发送的监控项指令,然后再由zabbix proxy向zabbix agent发起请求获取数据

端口

默认端口10051

实验

Zabbix proxy的大版本必须要和Zabbix Server的版本相同,不然会出问题。

所有主机的主机名要唯一,否则被动模式可能会影响数据采集。

Zabbix Server 192.168.28.60 Ubuntu2204 Apache MySQL
Zabbix Proxy Active 192.168.28.61 Ubuntu2204 MySQL 包安装
Zabbix Proxy Passive 192.168.28.62 Ubuntu2204 MySQL 编译安装
Zabbix Agent1 192.168.28.41 Rocky8.9
Zabbix Agent2 192.168.28.42 Rocky8.9

Zabbix Server

[root@zbx-server ~]#apt -y install mysql-server
[root@zbx-server ~]#apt -y install language-pack-zh-hans
[root@zbx-server ~]#wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb && dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb && apt update && apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
[root@zbx-server ~]#mysql

mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.00 sec)

mysql> create user zabbix@localhost identified by 'Admin.123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on zabbix.* to zabbix@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> quit;
Bye
[root@zbx-server ~]#zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
Enter password:
[root@zbx-server ~]#mysql

mysql> set global log_bin_trust_function_creators = 0;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> quit;

[root@zbx-server ~]#vim /etc/zabbix/zabbix_server.conf
DBPassword=Admin.123

[root@zbx-server ~]#vim /etc/zabbix/apache.conf
php_value date.timezone Asia/Shanghai

[root@zbx-server ~]#vim /etc/apache2/sites-enabled/000-default.conf
ServerAdmin wenzi.zabbix.com

[root@zbx-server ~]#systemctl restart zabbix-server zabbix-agent apache2
[root@zbx-server ~]#systemctl enable zabbix-server zabbix-agent apache2

1、Zabbix Proxy Active

包安装

[root@zbx-proxy-active ~]#apt -y install mysql-server
[root@zbx-proxy-active ~]#wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
[root@zbx-proxy-active ~]#dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
[root@zbx-proxy-active ~]#apt update
[root@zbx-proxy-active ~]#apt install zabbix-proxy-mysql zabbix-sql-scripts
[root@zbx-proxy-active ~]#mysql
mysql> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.00 sec)

mysql> create user zabbix@localhost identified by 'Admin.123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> quit;
Bye

[root@zbx-proxy-active ~]#cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy
Enter password:
[root@zbx-proxy-active ~]#mysql
mysql> set global log_bin_trust_function_creators = 0;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> quit
Bye

-------------------------------------关键配置
[root@zbx-proxy-active ~]#vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.28.60
Hostname=zabbix-proxy1-active
DBPassword=Admin.123



[root@zbx-proxy-active ~]#systemctl restart zabbix-proxy
[root@zbx-proxy-active ~]#systemctl enable zabbix-proxy

Zabbix Proxy 配置文件说明

ProxyMode=0                         #主动模式为0,被动模式为1,默认为0即主动模式
Server=10.0.0.100                   #指向Zabbix Server
Hostname=zabbix-proxy-active        #主动模式:此名称必须和后面Web管理页的agent代理程序名称相同
                                    #被动模式:可以不一致
DBHost=localhost                    #MySQL服务器地址
DBName=zabbix_proxy_active          #MySQL数据库名
DBUser=proxy                        #连接MySQL的用户
DBPassword=123456                   #连接MySQL的用户密码

LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
DebugLevel=4                        #指定日志级别,默认为3,值越大日志越详细
EnableRemoteCommands=1              #开启远程命令,允许server到proxy上执行命令,在故障自愈时使用
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
ProxyLocalBuffer=360             #当proxy将数据发送给server后将数据仍在本地保存多少时间,默认不保留
ProxyOfflineBuffer=720           #当proxy和server无法连接时将数据在本地保存多长时间,默认1小时
HeartbeatFrequency=60            #server端用来检测proxy可用性的心跳信息的时间间隔,被动模式无效
ConfigFrequency=60               #每间隔多少时间到server获取监控项,在agent更新端监控项,只在主动模式有效,默认3600s
DataSenderFrequency=60           #数据发送的间隔时间,只在主动模式有效,默认1s,建议加长
JavaGateway=10.0.0.101           #指向JAVA gateway主机
StartJavaPollers=10              #指定开启的进程数,默认为0,即不开启
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=8M                      #当主机数量很多时,会将获取的监控项存放在缓存中,生产中设置2G
StartDBSyncers=4                  #启动多少个线程和数据库连接
HistoryCacheSize=16M              #保存agent发送过来的监控数据的内存空间大小,生产中设置2G 
HistoryIndexCacheSize=4M          #历史数据的索引
Timeout=30                        #获取数据的最长等待时间
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000               #慢查询时长

1.1 Zabbix Agent1

使用主动模式

[root@zbx-agent1 ~]$rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm
[root@zbx-agent1 ~]$dnf clean all
[root@zbx-agent1 ~]$dnf install zabbix-agent

-------------------------------------关键配置
[root@zbx-agent1 ~]$vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.28.61
ServerActive=192.168.28.61    
Hostname=zabbix-agent1



[root@zbx-agent1 ~]$systemctl enable --now zabbix-agent.service

Zabbix Agent 配置文件说明

LogFile=/tmp/zabbix_agentd.log
Server=10.0.0.100,10.0.0.101         #指向Zabbix Server(可选)和Zabbix Proxy(必
选)
ServerActive=10.0.0.101              #指向Zabbix Proxy
Hostname=10.0.0.103                  #主动模式:和web界面主机名称一致
                                     #被动模式:可以不一致

1.2 配置Zabbix Web

浏览器访问 http://wenzi.zabbix.com/zabbix/

添加代理

此处代理名称和Zabbix Proxy配置文件中 Hostname保持一致

 

配置Agent1使用Proxy Active

此处主机名称和Zabbix Agent配置文件中 Hostname保持一致

2 Zabbix Proxy Passive

编译安装

[root@zbx-proxy-passive ~]#apt update
[root@zbx-proxy-passive ~]#useradd zabbix
[root@zbx-proxy-passive ~]#apt -y install gcc make libxml2-dev libevent-dev libmysqlclient-dev libsnmp-dev libssh2-1-dev libcurl4-openssl-dev
[root@zbx-proxy-passive ~]#wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.27.tar.gz
[root@zbx-proxy-passive ~]#tar -xf zabbix-6.0.27.tar.gz -C /usr/local/
[root@zbx-proxy-passive ~]#cd /usr/local/zabbix-6.0.27/
[root@zbx-proxy-passive zabbix-6.0.27]#./configure --prefix=/apps/zabbix_proxy --enable-proxy --with-agent --with-net-snmp --with-mysql --with-ssh2 --with-libcurl --with-libxml2

在进行./configure 生成makefile过程中可能会报错 configure: error: LIBXML2 library not found
使用此命令检查 apt install pkgconf && pkg-config --cflags --libs libxml-2.0  
执行完毕删除重新解压缩编译即可

[root@zbx-proxy-passive zabbix-6.0.27]# ~]#make && make install
[root@zbx-proxy-passive zabbix-6.0.27]#vim /lib/systemd/system/zabbix-proxy.service
[Unit]
Description=Zabbix Proxy
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/apps/zabbix_proxy/etc/zabbix_proxy.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-proxy
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_proxy.pid
KillMode=control-group
ExecStart=/apps/zabbix_proxy/sbin/zabbix_proxy -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0

[Install]
WantedBy=multi-user.target


[root@zbx-proxy-passive ~]#apt -y install mysql-server
[root@zbx-proxy-passive ~]#mysql
mysql> create database zabbix_proxy_passive character set utf8 collate utf8_bin;
Query OK, 1 row affected, 2 warnings (0.01 sec)

mysql> create user proxy@'localhost' identified by 'Admin.123';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on  zabbix_proxy_passive.* to proxy@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

[root@zbx-proxy-passive ~]#cd /usr/local/zabbix-6.0.27/ && mysql -uproxy -pAdmin.123 zabbix_proxy_passive < database/mysql/schema.sql
[root@zbx-proxy-passive ~]#mysql
mysql> set global log_bin_trust_function_creators = 0;
Query OK, 0 rows affected, 1 warning (0.00 sec)


-------------------------------------关键配置
[root@zbx-proxy-passive ~]#vim /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1
Server=192.168.28.60
Hostname=zabbix-proxy2-passive    #此项无关web界面,可以不改
DBName=zabbix_proxy_passive    
DBUser=proxy
DBPassword=Admin.123




[root@zbx-proxy-passive ~]#systemctl daemon-reload
[root@zbx-proxy-passive ~]#systemctl enable --now zabbix-proxy.service

2.1 Zabbix Agent2

使用被动模式

[root@zbx-agent2 ~]$vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.28.62
Hostname=zabbix_agent2    #此项无关web界面,可以不改
#ServerActive=127.0.0.1   #注释此行
[root@zbx-agent2 ~]$systemctl restart zabbix-agent.service

2.2 配置Zabbix Web

添加代理

代理程序名称无需和配置文件Hostname保持一致

配置Agent2使用Proxy Passive

主机名称无需和配置文件Hostname保持一致

Zabbix实现自动化

API:Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组功能的能力,而又无需直接使用源代码,或理解内部工作机制的细节。

Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。广泛用于:

  • 创建新的应用程序以使用Zabbix
  • 将Zabbix与第三方软件集成
  • 自动执行常规任务

Zabbix API是基于Web的API,作为Web前端的一部分提供。使用JSON-RPC 2.0协议,这意味:

  • 该API包含一组独立的方法
  • 客户端和API之间的请求和响应使用JSON格式进行编码

官方文档:19. API

常用API

user.login                          #用户登录
host.get(create|delete|update)      #主机操作
hostgroup.get(create|delete|update) #主机组操作
item.get(create|delete|update)      #监控项目操作
history.get                         #历史数据查询
event.get                           #事件查询
trigger.get                         #触发器查询

API路径和Web服务器有关

#如果是基于Nginx
http://${ZABBIX_SERVER}/api_jsonrpc.php 
#如果是基于Apache
http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php

实验

官方文档API部分有很多案例。

获取Token(一切操作的基础)

请求的 Content-Type 头部必须设置为以下值之一:application/json-rpc,application/json 或 application/jsonrequest。

访问Zabbix内部的任何数据之前,需要登录并获得身份验证令牌。

[root@zbx-server ~]#cat zabbix-api-token.sh
#!/bin/bash
#********************************************************************
#FileName:     zabbix-api-token.sh
#Version:      1.0
#Date:         2024-03-08
#Author:       wenzi
#Description: This is description
#********************************************************************

#httpd
zabbix_server='http://wenzi.zabbix.com/zabbix'
#nginx
#zabbix_server='http://wenzi.zabbix.com'
user=Admin
password=zabbix


curl -s -X POST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "'${user}'",
"password": "'${password}'"
},
"id": 1,
"auth": null
}' ${zabbix_server}/api_jsonrpc.php

[root@zbx-server ~]#./zabbix-api-token.sh | jq
{
  "jsonrpc": "2.0",
  "result": "6c55fa45f2d903a117627b5a22188ec9",
  "id": 1
}

查询所有已配置主机的ID,主机名,接口

[root@zbx-server ~]#cat zabbix-api-gethost.sh
#!/bin/bash
#********************************************************************
#FileName:     zabbix-api-gethost.sh
#Version:      1.0
#Date:         2024-03-08
#Author:       wenzi
#Description: This is description
#********************************************************************

source ./zabbix-api-token.sh
token=`./zabbix-api-token.sh | awk -F '"' '{print $8}'`

curl -s -X POST -H "Content-Type: application/json-rpc" -d '
{
           "jsonrpc": "2.0",
           "method": "host.get",
           "params": {
               "output": [
                   "hostid",
                   "host"
               ],
               "selectInterfaces": [
                   "interfaceid",
                   "ip"
               ]
           },
           "id": 2,
           "auth": "'${token}'"
       }' ${zabbix_server}/api_jsonrpc.php

[root@zbx-server ~]#./zabbix-api-gethost.sh  | jq
{
  "jsonrpc": "2.0",
  "result": "a9f80171e010bcbdc58a3c3119544e08",
  "id": 1
}
{
  "jsonrpc": "2.0",
  "result": [
    {
      "hostid": "10084",
      "host": "Zabbix server",
      "interfaces": [
        {
          "interfaceid": "1",
          "ip": "127.0.0.1"
        }
      ]
    },
    {
      "hostid": "10620",
      "host": "ubuntu",
      "interfaces": [
        {
          "interfaceid": "46",
          "ip": "192.168.28.62"
        }
      ]
    },
    {
      "hostid": "10621",
      "host": "rocky",
      "interfaces": [
        {
          "interfaceid": "47",
          "ip": "192.168.28.41"
        }
      ]
    }
  ],
  "id": 2
}

Zabbix 高可用

使用keepalive实现  或  使用官方提供高可用解决方案(Zabbix6.0)

官方文档:1 高可用

概述

通常高可用性(HA)需要在几乎不需要停机的关键基础设施中使用。为了在服务出现任何失败故障时进行故障转移,进行接管。

Zabbix提供了一个本地的高可用性解决方案,方便设置,不需要任何HA专业知识也可以完成。本地Zabbix HA对于防止Zabbix server的软件/硬件故障或减少维护停机时间是有用的。

Zabbix高可用模式下,多台Zabbix server作为集群中的节点运行。 当集群中的一个Zabbix server 处于active 时,其他服务器处于standy,随时准备在必要时接管。切换到Zabbix HA还不确定。 您可以在任何时候切换回standalone状态。

启用高可用集群

作为集群节点启动Zabbix server

在server配置中需要两个参数来启动Zabbix server作为集群节点:

  • HANodeName 集群中每个zabbix server节点名称必须要有且唯一。

这是将在agent和proxy配置中引用server的名称 (例如: zabbix-node-01)。如果您没有指定HANodeName,那么服务器将以standalone模式启动。

  • NodeAddress 参数必须为每个节点指定。

NodeAddress参数(address:port)将被Zabbix前端用来连接到主server节点。NodeAddress必须匹配相应Zabbix server的IP或FQDN名称。

Zabbix HA解决方案由多个zabbix_server实例或节点组成。每个节点独立配置,但数据库是使用同一个实例。

Zabbix HA节点包括以下几种状态:

  • active(活动)
  • standby(备用)
  • unavailable(不可用)
  • stopped(停止)

在同一个Zabbix HA集群中,只有一个实例或节点处于active(活动)状态,standby(备用)节点不进行数据收集、处理或其他任务,并且不监听端口,并保持一个最少的数据库连接。

实验

MySQL 192.168.28.62
Zabbix master 192.168.28.60
Zabbix slave 192.168.28.61
Zabbix Agent1 192.168.28.41
Zabbix Agent2 192.168.28.42

MySQL

[root@mysql ~]#apt update && apt -y install mysql-server
注释下面两行
[root@mysql ~]#vim /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address       = 127.0.0.1
#mysqlx-bind-address    = 127.0.0.1

[root@mysql ~]#mysql
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@'192.168.28.%' identified by 'Admin.123';
grant all privileges on zabbix.* to zabbix@'192.168.28.%';
set global log_bin_trust_function_creators = 1;

[root@mysql ~]#mysql
set global log_bin_trust_function_creators = 0;

Zabbix master

在没有完成集群配置前,不要同时启动多个Zabbix Server

安装完毕后 ,将初始化sql导入远程MySQL;(备用节点无需做此步)

修改zabbix server配置文件;

修改web服务器nginx配置文件

登录 wenzi.zabbix.com 进行web初始化(备用节点无需做此步,将主节点生成的php配置文件 /usr/share/zabbix/conf/zabbix.conf.php 复制到slave节点即可)

[root@master ~]#zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h192.168.28.62 zabbix --default-character-set=utf8mb4 -uzabbix -p

[root@master ~]#vim /etc/zabbix/zabbix_server.conf
DBHost=192.168.28.62
DBName=zabbix
DBUser=zabbix
DBPassword=Admin.123
HANodeName=zabbix-master
NodeAddress=192.168.28.60:10051


[root@master ~]#vim /etc/zabbix/nginx.conf
listen          80;
server_name     wenzi.zabbix.com;

重启服务
[root@master ~]#systemctl mask apache2.service
[root@master ~]#systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm
单独关闭zabbix-server
[root@master ~]#systemctl stop zabbix-server.service

Zabbix slave

安装完毕后 ,修改zabbix server配置文件;

修改web服务器nginx配置文件;

[root@master ~]#vim /etc/zabbix/zabbix_server.conf
DBHost=192.168.28.62
DBName=zabbix
DBUser=zabbix
DBPassword=Admin.123
HANodeName=zabbix-slave
NodeAddress=192.168.28.61:10051


[root@master ~]#vim /etc/zabbix/nginx.conf
listen          80;
server_name     wenzi.zabbix.com;

[root@slave ~]#scp root@192.168.28.60:/usr/share/zabbix/conf/zabbix.conf.php /usr/share/zabbix/conf/zabbix.conf.php
[root@slave ~]#chown -R www-data:www-data /usr/share/zabbix/conf/zabbix.conf.php

重启服务
[root@master ~]#systemctl mask apache2.service
[root@master ~]#systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm
单独关闭zabbix-server
[root@master ~]#systemctl stop zabbix-server.service

Zabbix Agent1/Agent2

安装完毕后,将配置文件中Server地址指向master、slave。

配置Agent,Zabbix HA的方案需要在agent配置文件中将所有的Server节点地址同时都配置到Server和ServerActive中。

备用节点不监听 10051 端口

[root@agent1 ~]$vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.28.60,192.168.28.61
ServerActive=192.168.28.60,192.168.28.61
[root@agent1 ~]$systemctl restart zabbix-agent.service

测试

启动主从节点,在主节点执行 zabbix_server -R ha_status

在从节点执行 zabbix_server -R ha_status ,会提示 Runtime commands can be executed only in active mode。

Web界面查看

 

模拟故障:停止Zabbix Server master 服务

可见slave节点已经生效

启动master节点

自动成为slave节点

相关推荐

  1. <span style='color:red;'>Zabbix</span>

    Zabbix

    2024-03-11 13:42:04      46 阅读
  2. <span style='color:red;'>zabbix</span>

    zabbix

    2024-03-11 13:42:04      21 阅读
  3. <span style='color:red;'>zabbix</span>

    zabbix

    2024-03-11 13:42:04      13 阅读
  4. zabbix】()-钉钉告警&企业微信配置

    2024-03-11 13:42:04       51 阅读
  5. 部署zabbix

    2024-03-11 13:42:04       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 13:42:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 13:42:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 13:42:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 13:42:04       20 阅读

热门阅读

  1. linux Shell 命令行-02-var 变量

    2024-03-11 13:42:04       21 阅读
  2. MySQL之主从同步(openEuler版)

    2024-03-11 13:42:04       19 阅读
  3. 【SQL - 软件 - MySQL】随笔 - 查看已有数据库

    2024-03-11 13:42:04       20 阅读
  4. linux系统 QT 处理键盘Ctrl+C信号

    2024-03-11 13:42:04       19 阅读
  5. 举例说明计算机视觉(CV)技术的优势和挑战。

    2024-03-11 13:42:04       25 阅读
  6. Ubuntu系统开发环境搭建和常用软件

    2024-03-11 13:42:04       17 阅读
  7. Unity3D 基于AStar地图的摇杆控制角色详解

    2024-03-11 13:42:04       20 阅读
  8. Debian系APT源通用镜像加速配置

    2024-03-11 13:42:04       21 阅读
  9. NLP技术

    2024-03-11 13:42:04       22 阅读
  10. Go语言聊天室demo

    2024-03-11 13:42:04       19 阅读
  11. 【golang】二叉树的遍历

    2024-03-11 13:42:04       22 阅读
  12. Go语法之函数 defer使用

    2024-03-11 13:42:04       20 阅读