华为 ASG Manager 镜像日志接收链路故障排查流程

作者实战经验总结,基于 ASG Manager V200R001C00SPC100 + ASG5305 设备。

前言:文章是AI总结。总体解决问题思路就是查各种日志,看报错。主要是要看worker日志。由于现在不做开发了。也不想加载原包到开发工具里面去调试。就全程让AI(openclaw)。抓日志分析,搞了好几天。用的minimax3.0,多少有点蠢。不过最后还是找到解决方法了。我折腾主要还是想搞清楚问题在那里。

如果各位不想折腾也可以直接用软件自带的datacenter_upgrade.sh直接修复。还不行就直接remove.sh再setup.sh。简单粗暴。我主要是出现这个问题还是有2-3次了,问题还不太一样。

网上关于asg-manager的文章也比较少,所以想着发出来,给遇到问题的朋友一个思路。

【核心结论】

ASG Manager 镜像日志接收链路 = 设备 syslog → 服务器网卡 → Pcap4j 抓包 →

Storm 拓扑 → ClickHouse 落库 → Web 控制台展示。

任意环节断开都会导致"控制台看不到日志"。

================================================================

一、ASG Manager 架构与日志流转链路

================================================================

【1.1 软件组件全景:8 个核心组件】

┌─────────────┬──────────────────────────────────┬──────────────┬─────────────┐

│ 组件 │ 路径 │ 端口 │ 作用 │

├─────────────┼──────────────────────────────────┼──────────────┼─────────────┤

│ Zookeeper │ /home/datacenter/zookeeper/ │ 2181 │ 分布式协调 │

│ MySQL │ 系统服务 │ 3306 │ 元数据 │

│ Clickhouse │ /usr/local/sbin/clickhouse/ │ 8123/9000/ │ 日志/流量 │

│ │ │ 9009 │ 列式存储 │

│ Storm │ /home/datacenter/storm/bin/ │ 6627(Nimbus) │ 实时流处理 │

│ Nimbus/UI │ │ 8080(UI) │ 调度+监控 │

│ Storm │ 同上 │ 6700+ │ Worker 进程 │

│ Supervisor │ │ (slot) │ │

│ Tomcat × 6 │ /home/datacenter/tomcat-{ums, │ 28880 等 │ Web 服务 │

│ │ cas,xxl,manager,datacenter,webui}│ │ │

│ Nginx │ 系统服务 │ 80/443 │ 反向代理 │

│ JDK │ /usr/lib/jdk1.8.0_171 │ --- │ Java 运行时 │

└─────────────┴──────────────────────────────────┴──────────────┴─────────────┘

【1.2 完整日志流转链路:排查的核心地图】

ASG5305 设备 (192.168.1.8)

│ ① UDP syslog (端口 514)

服务器 p8p1 网卡(物理层抓包)

│ tcpdump -i any 'udp port 514' 可直接抓到

Pcap4j Java JNI 包装层

│ libpcap 1.5.3 系统库调用

│ Pcaps.getDevByName("p8p1") → PcapNetworkInterface 对象

PcapUtil.init(String name) com.abt.totems.common.PcapUtil

│ 用 NIF.getName() 构造 PcapHandle.Builder

│ .snaplen(PCAP4J_SNAPLEN).promiscuousMode(PROMISCUOUS)

│ .timeoutMillis(PCAP4J_TIMEOUT).bufferSize(PCAP4J_BUFFER_SIZE)

│ .build() → PcapHandle

│ .setFilter("udp and dst port 514", OPTIMIZE)

│ 启动 pcapThread (Thread.start)

PCAP4J_SPOUT (Storm spout)

│ PcapHandle.loop(-1, lambda) ← 持续抓包

│ 每个 packet → rawData (byte\[\])

│ 放入 LOG_QUEUE (ConcurrentLinkedQueue)

LOG_TYPE_SPLIT_BOLT → 分类

│ http_get / http_post / dns / ftp / telnet /

│ user_account / search_engine / mail

各类 PARSE_BOLT(解析)

│ TRAFFIC_SESSION_PARSE_BOLT → 流量会话

│ ACTION_LOG_PARSE_BOLT → 行为日志

│ ALARM_LOG_PARSE_BOLT → 告警日志

│ DEVICE_HEALTH_PARSE_BOLT → 设备健康

│ DEVICE_TRAFFIC_PARSE_BOLT → 设备流量

│ WEB_ACCESS_PARSE_BOLT → Web 访问

Clickhouse (端口 8123/9000/9009)

│ src_device_traffic_log (原始流量日志)

│ src_statistic_traffic_log (统计流量)

│ src_web_access_log (Web 访问原始)

│ src_security_audit_log (安全审计原始)

│ dm_* (聚合表,每 5 分钟)

ASG Manager Web 控制台

│ Tomcat × 6 + Nginx 反向代理

│ 端口:8443 / 8444 / 28880 / 8080 / ...

最终展示给管理员

================================================================

二、故障排查标准化流程(先快后准)

================================================================

【2.1 第一步:确认基础链路(30 秒定位)】

目的:判断"链路断在哪一层"。

1.1 看 syslog 是否从设备发出 + 是否到达服务器

timeout 5 tcpdump -i any -c 3 'udp port 514'

期望看到:

IP 192.168.1.8.syslog > ...syslog: SYSLOG ...

看不到 → 设备端没发 / 网络断 / 网卡没接

1.2 看 8 个核心组件端口监听状态

ss -tlnp | grep -E ":2181|:3306|:8123|:9000|:9009|:6627|:8080|:28880"

期望:8 个端口都 LISTEN

缺哪个 → 对应组件没启动

1.3 看 Storm worker 是否在抓包

LATEST=$(find /home/datacenter/storm/logs/workers-artifacts \

-name worker.log -type f -exec ls -lt {} + | head -1 | awk '{print $NF}')

tail -5 "$LATEST" | grep "PCAP_COUNT_LONG"

期望:看到 "PCAP_COUNT_LONG: <递增的数字>"

永远是 0 → PcapUtil 抓包循环没起来(问题在第 ②③④⑤⑥ 层)

【2.2 第二步:定位"组件级"故障(2 分钟)】

根据 2.1 的结果决定深入哪里:

┌──────────────────────────────┬──────────────┬─────────────┐

│ 2.1 结果 │ 故障层 │ 跳到章节 │

├──────────────────────────────┼──────────────┼─────────────┤

│ tcpdump 抓不到 syslog 包 │ ① 设备/网络 │ 2.3.1 │

│ 8 端口有缺 │ 组件没启动 │ 2.3.2 │

│ PCAP_COUNT_LONG 永远 0 │ ②③④⑤⑥ 抓包│ 2.3.3 │

└──────────────────────────────┴──────────────┴─────────────┘

【2.3 各层故障详细排查】

【2.3.1 设备/网络层(syslog 收不到)】

确认网卡状态

ip -br link show

ip -d link show p8p1 # 替换成你的网卡名

期望:state UP, <BROADCAST,MULTICAST,UP,LOWER_UP>

卡 down → ifup p8p1

确认网卡名(用 pcap4j 看到的名字才是准确的)

cat > /tmp/ListNif.java << 'JAVA_EOF'

import org.pcap4j.core.*;

import java.util.List;

public class ListNif {

public static void main(String\[\] args) throws Exception {

List<PcapNetworkInterface> devs = Pcaps.findAllDevs();

for (int i = 0; i < devs.size(); i++) {

PcapNetworkInterface nif = devs.get(i);

System.out.println("" + i + " name='" + nif.getName() + "'");

}

}

}

JAVA_EOF

JAR=/home/datacenter/storm/data/supervisor/stormdist/$(ls /home/datacenter/storm/data/supervisor/stormdist/ | head -1)/stormjar.jar

cd /tmp/listnif && javac -cp JAR ListNif.java \&\& java -cp JAR:. ListNif

【2.3.2 组件没启动(端口缺失)】

按启动顺序排查(启动顺序很重要,错一步后面都白搭):

完整启动顺序(顺序不可颠倒)

sh /home/datacenter/init/CentOS/datacenter_startup.sh

内部依次启动:

  1. Zookeeper (2181)

  2. MySQL (3306)

  3. Clickhouse (8123/9000/9009)

  4. Storm nimbus + ui + supervisor (6627/8080)

  5. Tomcat × 6 (ums → cas → xxl → manager → datacenter → webui)

  6. Nginx

  7. Monit (看门狗)

启动失败的"卡点"对应故障组件,看启动日志的"卡在哪一步"即可定位。

【2.3.3 抓包链路故障(PcapUtil 层)】

核心:检查 Storm worker.log 的 3 个关键字

WLOG=/home/datacenter/storm/logs/workers-artifacts/$(ls /home/datacenter/storm/data/supervisor/stormdist/ | head -1)/6700/worker.log

grep -E "Pcap4J successfully loaded|NIF\(s\) found|Opened spout|Starting loop|设备名称不正确|获取网络接口失败|_handle为null" "$WLOG" | head -10

3 个关键字状态对照表

┌──────────────────────────────────────────────────┬────────────────────┐

│ 关键字 │ 含义/状态 │

├──────────────────────────────────────────────────┼────────────────────┤

│ Pcap4J successfully loaded a native pcap library│ ✅ 加载成功 │

│ 7 NIF(s) found │ ✅ 网卡枚举成功 │

│ Opened spout PCAP4J_SPOUT │ ✅ spout 组件加载 │

│ PcapHandle Starting loop │ ✅ 抓包循环启动 │

│ 设备名称不正确,获取网络接口失败 │ ❌ getDevByName 返回 │

│ │ null │

│ 获取网络接口失败 │ ❌ 抛 PcapNative │

│ │ Exception │

│ _handle为null │ ❌ 没成功打开 handle│

└──────────────────────────────────────────────────┴────────────────────┘

【3 种报错的修复方法】

─────────────────────────────────────

报错 A:设备名称不正确

─────────────────────────────────────

根因:pcap4j 通过 getDevByName("p8p1") 找不到该名字的网卡。

修复:重新选择正确的网卡名

这个脚本会自动:列网卡 → 选择 → 写 /etc/profile → kill topology → 重新提交

sh /home/datacenter/init/log_interface.sh

交互输入对应网卡的数字

─────────────────────────────────────

报错 B:获取网络接口失败

─────────────────────────────────────

根因:libpcap native 调用抛异常(权限/库版本/网卡状态问题)

修复:

1. 确认 supervisor 是 root(libpcap 需要 root 或 CAP_NET_RAW)

ps aux | grep supervisor | grep -v grep

2. 确认 libpcap 系统库存在

ls -la /usr/lib64/libpcap.so*

3. 确认 java.library.path 包含 native 库搜索路径

Storm 启动时会从以下路径查找:

/home/.../resources/Linux-amd64:

/home/.../resources:

/usr/local/lib:/opt/local/lib:/usr/lib

4. 重新提交 topology 清掉 supervisor 脏状态

sh /home/datacenter/init/log_interface.sh

─────────────────────────────────────

报错 C:_handle为null

─────────────────────────────────────

根因:上述 A 或 B 的后续,handle 没成功打开。

修复:同 A 或 B(修复后 handle 会自动重试)

================================================================

三、完整脚本(可直接复用)

================================================================

【3.1 ASG Manager 综合排查脚本】

bash 复制代码
#!/bin/sh
# asg-diagnose.sh --- ASG Manager 一键综合排查脚本
# 用途:30 秒定位"控制台看不到日志"的故障层
# 用法:上传到 ASG Manager 服务器后
#       sh asg-diagnose.sh
#       或 chmod +x asg-diagnose.sh && ./asg-diagnose.sh
# 适配:ASG Manager V200R001/V200R002 系列,默认部署路径 /home/datacenter/
# 兼容性:自动探测 jdk/clickhouse-client 路径,不依赖特定安装位置
#
# 输出:
#   [1/6] syslog 是否到达服务器
#   [2/6] 8 个核心端口监听状态
#   [3/6] pcap4j NIF 列表(网卡真实名字)
#   [4/6] Storm worker 状态(PCAP_COUNT_LONG + 启动期关键字)
#   [5/6] Clickhouse 原始日志表最新数据
#   [6/6] 故障层定位总结

echo "=========================================="
echo "  ASG Manager 链路综合诊断"
echo "  时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
echo ""

# === 探测关键依赖路径(避免硬编码)===
# jdk 路径探测
JDK_HOME=""
for p in /usr/lib/jdk1.8.0_171 /usr/lib/jvm/java-1.8.0-openjdk /usr/lib/jvm/java-8-openjdk /usr/lib/jvm/default-java /opt/jdk1.8.0_171 /usr/java/jdk1.8.0_171; do
    if [ -x "$p/bin/javac" ]; then
        JDK_HOME="$p"
        break
    fi
done
if [ -z "$JDK_HOME" ]; then
    JDK_HOME=$(dirname $(dirname $(readlink -f $(which javac 2>/dev/null) 2>/dev/null)) 2>/dev/null)
fi

# clickhouse-client 路径探测
CLICKHOUSE_CLIENT=""
for p in /usr/local/sbin/clickhouse/clickhouse-client /usr/bin/clickhouse-client /usr/local/bin/clickhouse-client; do
    if [ -x "$p" ]; then
        CLICKHOUSE_CLIENT="$p"
        break
    fi
done
if [ -z "$CLICKHOUSE_CLIENT" ]; then
    CLICKHOUSE_CLIENT=$(which clickhouse-client 2>/dev/null)
fi

# ASG Manager 默认部署路径(华为官方固定)
ASG_HOME="/home/datacenter"

echo "[1/6] 设备 syslog 是否到达服务器"
echo "----------"
timeout 5 tcpdump -i any -c 3 'udp port 514' 2>&1 | head -10
echo ""

echo "[2/6] 8 个核心端口监听状态"
echo "----------"
ss -tlnp 2>/dev/null | grep -E ":2181|:3306|:8123|:9000|:9009|:6627|:8080|:28880" | awk '{print "  端口:", $4, " 进程:", $6}'
echo ""

echo "[3/6] pcap4j NIF 列表(用 NIF 实际名字判断)"
echo "----------"
TOPO=$(ls -t "$ASG_HOME/storm/data/supervisor/stormdist/" 2>/dev/null | head -1)
if [ -z "$TOPO" ]; then
    echo "  ❌ 找不到 $ASG_HOME/storm/data/supervisor/stormdist/ 目录"
else
    echo "  最新 topology: $TOPO"
    JAR="$ASG_HOME/storm/data/supervisor/stormdist/${TOPO}/stormjar.jar"
    if [ ! -f "$JAR" ]; then
        echo "  ❌ 找不到 jar: $JAR"
    else
        echo "  jar: $JAR ($(ls -lh $JAR | awk '{print $5}'))"
        echo ""
        if [ -z "$JDK_HOME" ]; then
            echo "  ⚠️ 未找到 JDK,跳过 pcap4j NIF 列表(请确认 java/javac 已安装)"
        else
            echo "  jdk: $JDK_HOME"
            mkdir -p /tmp/asg-listnif
            cat > /tmp/asg-listnif/ListNif.java << 'JAVA_EOF'
import org.pcap4j.core.*;
import java.util.List;
public class ListNif {
    public static void main(String[] args) throws Exception {
        List<PcapNetworkInterface> devs = Pcaps.findAllDevs();
        System.out.println("  Total NIFs: " + devs.size());
        for (int i = 0; i < devs.size(); i++) {
            PcapNetworkInterface nif = devs.get(i);
            System.out.println("  [" + i + "] name='" + nif.getName() + "'  desc='" + nif.getDescription() + "'");
        }
    }
}
JAVA_EOF
            cd /tmp/asg-listnif
            $JDK_HOME/bin/javac -cp "$JAR" ListNif.java 2>&1 | head -5
            $JDK_HOME/bin/java -cp "$JAR:." ListNif 2>&1 | grep -E "Total NIF|name="
        fi
    fi
fi
echo ""

echo "[4/6] Storm worker 状态(启动期关键字 + 最近 PCAP_COUNT_LONG)"
echo "----------"
if [ -n "$TOPO" ]; then
    WLOG="$ASG_HOME/storm/logs/workers-artifacts/${TOPO}/6700/worker.log"
    if [ ! -f "$WLOG" ]; then
        echo "  ❌ 找不到 worker.log: $WLOG"
    else
        echo "  worker.log: $WLOG"
        echo ""
        echo "  --- 启动期关键日志 ---"
        grep -E "Pcap4J successfully loaded|NIF\(s\) found|Opened spout|Starting loop|设备名称不正确|获取网络接口失败|_handle为null" "$WLOG" 2>/dev/null | head -8 | sed 's/^/  /'
        echo ""
        echo "  --- 最近 5 行 PCAP_COUNT_LONG ---"
        tail -5 "$WLOG" 2>/dev/null | grep "PCAP_COUNT_LONG" | sed 's/^/  /'
    fi
fi
echo ""

echo "[5/6] Clickhouse 原始日志表最新数据"
echo "----------"
if [ -z "$CLICKHOUSE_CLIENT" ] || [ ! -x "$CLICKHOUSE_CLIENT" ]; then
    echo "  ⚠️ 未找到 clickhouse-client(请确认 clickhouse 服务安装位置)"
    echo "  手动查询方法:找到 clickhouse-client 后执行:"
    echo "    clickhouse-client --query \"SELECT table, MAX(send_time) FROM ("
    echo "      SELECT 'src_device_traffic_log' as table, send_time FROM totems.src_device_traffic_log"
    echo "      UNION ALL SELECT 'src_web_access_log', send_time FROM totems.src_web_access_log"
    echo "      UNION ALL SELECT 'src_security_audit_log', send_time FROM totems.src_security_audit_log"
    echo "    ) GROUP BY table\""
else
    echo "  clickhouse-client: $CLICKHOUSE_CLIENT"
    $CLICKHOUSE_CLIENT --query "
      SELECT
        table,
        MAX(send_time) AS latest_send_time,
        toUnixTimestamp(now()) - MAX(send_time)/1000 AS seconds_ago
      FROM (
        SELECT 'src_device_traffic_log' as table, send_time FROM totems.src_device_traffic_log
        UNION ALL SELECT 'src_web_access_log', send_time FROM totems.src_web_access_log
        UNION ALL SELECT 'src_security_audit_log', send_time FROM totems.src_security_audit_log
      )
      GROUP BY table
      ORDER BY seconds_ago ASC
    " 2>&1 | sed 's/^/  /'
fi
echo ""

echo "[6/6] 故障层定位总结"
echo "----------"
echo "  - syslog 收不到       → ① 设备/网络层(检查 ASG 设备 syslog 配置)"
echo "  - 端口缺              → 组件没启动($ASG_HOME/init/CentOS/datacenter_startup.sh)"
echo "  - PCAP_COUNT_LONG=0   → ②③④⑤⑥ 抓包链(看 4/6 输出的关键字)"
echo "  - 表无新数据          → Storm bolt 解析/写入问题(看 supervisor 日志)"
echo "  - 表有数据但控制台无  → Tomcat/Nginx Web 层问题"
echo ""
echo "=========================================="
echo "  诊断完成: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="

【3.2 修复脚本:重新选择网卡】

一行命令修复 PcapUtil "设备名称不正确" 问题

sh /home/datacenter/init/log_interface.sh

交互选网卡号(看自动列出的列表)

【3.3 重启 ASG Manager 整套服务】

完整重启(启动顺序固定)

sh /home/datacenter/init/CentOS/datacenter_shutdown.sh # 等 "Manager stopped."

sleep 30

sh /home/datacenter/init/CentOS/datacenter_startup.sh # 等 "Manager started."

================================================================

四、实战案例(故障 → 定位 → 修复)

================================================================

【案例:控制台看不到新数据】

─────────────────────────────────────

Step 1:综合诊断(30 秒)

─────────────────────────────────────

运行:sh asg-diagnose.sh

输出关键信息:

syslog 到达 ✅ tcpdump 抓到

8 端口全开 ✅

pcap4j 7 NIFs found ✅

但 worker.log 报错 ❌ 设备名称不正确

PCAP_COUNT_LONG ❌ 永远是 0

─────────────────────────────────────

Step 2:定位故障层

─────────────────────────────────────

故障层 = ④ PcapUtil.init() → getDevByName 失败

─────────────────────────────────────

Step 3:修复

─────────────────────────────────────

sh /home/datacenter/init/log_interface.sh

选择 p8p1 对应的数字

脚本自动执行:

1. storm kill PcapLogParseTopology -w 10

2. sleep 40

3. storm jar storm-1.0-SNAPSHOT.jar com.abt.totems.PcapLogParseTopology p8p1

─────────────────────────────────────

Step 4:验证修复

─────────────────────────────────────

WLOG=$(find /home/datacenter/storm/logs/workers-artifacts \

-name worker.log -type f -exec ls -lt {} + | head -1 | awk '{print $NF}')

tail -20 "$WLOG" | grep "PCAP_COUNT_LONG"

期望:数字持续增长(每 10 秒 +150~200)

─────────────────────────────────────

修复时间

─────────────────────────────────────

从综合诊断到修复成功 = 5 分钟

================================================================

五、ASG Manager 常用命令速查表

================================================================

┌────────────────────┬──────────────────────────────────────────────┐

│ 用途 │ 命令 │

├────────────────────┼──────────────────────────────────────────────┤

│ 看 storm 进程数 │ ps aux | grep storm | wc -l (正常 = 6) │

│ 启动整套服务 │ sh /home/datacenter/init/CentOS/ │

│ │ datacenter_startup.sh │

│ 停止整套服务 │ sh /home/datacenter/init/CentOS/ │

│ │ datacenter_shutdown.sh │

│ ★ 更换日志接收网卡 │ sh /home/datacenter/init/log_interface.sh │

│ 看 worker.log │ tail -f /home/datacenter/storm/logs/ │

│ │ workers-artifacts/<最新目录>/6700/ │

│ │ worker.log │

│ 看 Clickhouse 端口 │ ss -tlnp | grep -E ":8123|:9000|:9009" │

│ 反编译 PcapUtil │ unzip -p <stormjar.jar> com/abt/totems/ │

│ │ common/PcapUtil.class > /tmp/P.class && │

│ │ /usr/lib/jdk1.8.0_171/bin/javap -c -p │

│ │ /tmp/P.class │

└────────────────────┴──────────────────────────────────────────────┘

================================================================

六、关键经验总结

================================================================

【6.1 必须建立"日志流转地图"的概念】

排查任何"看不到日志"的问题,第一步不是猜原因,而是:

  1. 画出完整日志流转链路(设备 → 抓包 → Storm → DB → Web)

  2. 在每个节点上做一次"心跳检测"

  3. 第一个失败的节点 = 根因所在

【6.2 三个黄金关键字】

worker.log 里只关注这 3 个关键字:

  • "设备名称不正确" → 网卡找不到 → 跑 log_interface.sh

  • "获取网络接口失败" → native 调用异常 → 检查 libpcap 权限/版本

  • "_handle为null" → 前两者的后续 → 重新跑 log_interface.sh

【6.3 PCAP_COUNT_LONG 是"流量计"】

  • 持续增长(每 10 秒 +150~200)= 数据流正常 ✅

  • 永远是 0 = PcapUtil 抓包链断了 ❌

  • 不增长但不为 0 = 上游有数据但下游处理卡了

【6.4 反编译是终极武器】

当 log_interface.sh 修不好时,反编译看代码:

JAR=/home/datacenter/storm/data/supervisor/stormdist/<最新目录>/stormjar.jar

unzip -p "$JAR" com/abt/totems/common/PcapUtil.class > /tmp/P.class

/usr/lib/jdk1.8.0_171/bin/javap -c -p /tmp/P.class

字节码告诉你:

  • Pcaps.getDevByName 调用位置

  • 异常处理路径(catch 块 vs null 检查)

  • 实际报错触发哪个分支

================================================================

七、附:环境信息

================================================================

ASG Manager 版本 V200R001C00SPC100

设备型号 ASG5305(已 EOFS)

服务器 OS CentOS 7.4 / 内核 3.10.0-514.el7.x86_64

JDK /usr/lib/jdk1.8.0_171 (PATH 没配)

libpcap /usr/lib64/libpcap.so.1.5.3

Storm 1.1.2

Clickhouse (8123/9000/9009)

Tomcat 6 个独立实例

Pcap4j 1.x

最后:这个asg-diagnose.sh脚本,大家直接复制用的话可能会报错,得根据自己的环境改。其实核心的上面也说了,就是要看storm日志,Tomcat-datacenter日志,clickhouse日志(需要改启动脚本,输出日志,默认没输出(非关键)),tomcat-manager日志。以及最关键的worker.log。

相关推荐
张宇Joaquin3 小时前
S920X00机器CentOS 7.6下大批量容器执行docker exec卡顿
linux·docker·centos
刀鋒偏冷3 天前
CentOS 7 配置 Python 3.12.4 + RTX 4090 深度学习环境全记录
python·深度学习·centos
SatanII3 天前
华为云ECS实践:从创建、镜像制作到弹性伸缩完整实操指南
linux·运维·服务器·学习·centos·华为云
闲云野鹤在人间3 天前
云计算入门|网络与存储云服务知识梳理
linux·运维·服务器·网络·centos·云计算·php
zx_741484818 天前
【Linux入门】Linux 安装:VMware Workstation Pro 安装 CentOS 7 保姆级图文教程
linux·centos
IT爱学堂8 天前
新版Linux零基础入门到高手Rocky版本-替换CentOS(完结)
linux·运维·centos
dazhong20128 天前
Docker 进阶篇(一) CentOS 7 离线升级 Docker 完整实战
docker·容器·centos
IT大白鼠9 天前
CentOS 7.9 自建 Yum 源服务器搭建指南
linux·服务器·centos
闲云野鹤在人间12 天前
KVM虚拟化实战|CentOS‑Stream8 两种安装方式+模板制作+基础使用
linux·运维·服务器·centos