运维工程师番外篇

众所周知,今天是520,谐音也就是我爱你的意思。每年的5月20日,无数的情侣们会借此机会表达爱意,送上深情的祝福,小张想要早点下班去和女朋友去约会。但是作为一名运维工程师,小张需要负责监控、维护、优化以及故障排查等多方面工作,并且时刻待命。

4450a7fd6486d22d639fbd58d919c72a
运维工程师的生活总是充满了不可预知的“惊喜”,尤其是在下班前遇到故障,这种情况简直可以编入“墨菲定律”豪华典藏版。面对这样的“幸运时刻”,小张快下班前,系统又出问题了。。。。(每一个即将下班的瞬间,都是对技术与意志的终极考验)

为了能更早的解决问题,小张灵机一动,想到了用最近爆火的Baidu Comate助手来帮助他高效定位问题。以便能够早点下班,去见心爱的小美~

那么Baidu Comate助手到底好不好用,下面让我们一探究竟~

下面我将使用VSCode远程登录主机来演示Baidu Comate如何帮助运维工程师提高运维效率

1. Baidu Comate

2023年10月24日,Comate智能编程助手,将全面开放,它是一个基于文心大模型的智能代码助手。结合百度多年积累的编程现场大数据和外部优秀开源数据,能够生成更符合实际研发场景的优质代码。

主要的功能有代码智能推荐,智能生成,智能问答等,可以结合我们的项目的实际代码进行创作和提高代码编辑效率,其支持绝大部门目前主流的代码编辑器。

  • 基于百度厂内优质编程现场大数据以及大量优秀的开源数据进行训练,Baidu Comate 可以通过分析当前代码的上下文语义环境,快速推理出下一行或下一段可能的代码内容,采纳方式高效便捷,从而减少您的实际输入,提高研发效率。
  • Baidu Comate 支持注释生成代码、增强生成代码、生成单元测试、代码生成doc注释、代码解释、生成行间注释、长函数拆分等多种强大的智能生成功能,旨在全面满足多样化的研发场景需求,全方位提高研发效率。
  • 依托文心大模型,Baidu Comate 提供多轮对话智能问答功能,拒绝跳转和打扰,直接在 IDE 中解决您的研发问题,打造沉浸式的高效编码体验。

image-20240520220914752

2. Comate部署

部署软件环境:VSCode 12.0.267

Baidu Comate版本:v2.4.0

Remote-ssh版本: v0.110.1

运行有WordPress博客的主机站点IP:60.204.250.23

Baidu Comate智能代码助手下载链接:https://comate.baidu.com/zh/shopping?inviteCode=wqbkm0mu

打开VSCode

image-20240520225700738

选择拓展,搜索ssh,安装Remote-SSH

image-20240520225747921

安装完成后,在右侧会出现类似图标

image-20240520230454701

点击+号

image-20240520230954092

输入"ssh root@60.204.250.23"

注释:此处的60.204.250.23为我自己的主机,每个人因人而异,不会一样,此语句为远程登录linux主机的命令

右下角选择连接

image-20240520231240455

然后输入linux服务器主机密码进行连接

可以看到我们的主机已经连接成功

image-20240520231418298

点击小箭头选择在新窗口打开

image-20240520231444005

右侧选择打开文件夹,选择打开"/"路径

image-20240520231836269

选择"是,我信任此作者"

image-20240520231904727

至此,我们已经连接远程主机,可以查看远程目录

image-20240520232036398

然后我们在远程主机上部署Baidu Comate智能代码助手

在应用商店搜索Baidu Comate,选择安装,此时,Comate就会安装到我们的远程主机上

image-20240520232411088

image-20240520232711217

3. 使用Comate进行基本运维操作

3.1 更改系统时钟服务器

假如我忘记了更改系统时钟服务服务器的步骤,可以问一下Comate,linux下时钟服务器配置文件路径

41

Comate不仅给出了路径,还提供了更改时钟服务器的命令行,我们可以直接按照步骤引用

未来最小化我的工作量,我向Comate发出如下命令

我是centos操作系统,修改时钟同步服务器为 127.0.0.1

42

可以看出Comate给出了详细的操作步骤

在CentOS操作系统中,要将时钟同步服务器的地址修改为127.0.0.1,通常涉及NTP(Network Time Protocol)客户端的配置。NTP客户端的配置文件是/etc/ntp.conf,其中包含了NTP服务器的地址和本地时钟的相关信息。

以下是一般的步骤来修改NTP客户端的配置,使其指向本地地址127.0.0.1:

编辑NTP配置文件: 打开终端,使用文本编辑器(如vi或nano)编辑NTP配置文件。

sudo vi /etc/ntp.conf
修改或添加NTP服务器: 在配置文件中,找到现有的NTP服务器地址或者添加新的服务器地址。你需要将NTP服务器的地址修改为127.0.0.1。确保你有一个类似于以下的行:

server 127.0.0.1 iburst
这里,server关键字后面跟着的是NTP服务器的地址,iburst选项表示在启动NTP客户端时尝试快速同步时间。

保存并关闭文件: 在vi编辑器中,按Esc,然后输入:wq并按Enter保存并退出。

重启NTP服务: 为了使新的配置生效,你需要重启NTP服务。

sudo systemctl restart ntpd
或者,如果你的系统使用的是chronyd服务,则运行:
sudo systemctl restart chronyd
检查NTP服务状态: 确保NTP服务正在运行。

sudo systemctl status ntpd
或者对于chronyd:
sudo systemctl status chronyd
验证时间同步: 你可以使用ntpq命令来查看NTP客户端的状态和同步信息。

ntpq -p
如果一切正常,你应该能看到与本地服务器(127.0.0.1)的同步信息。

请注意,将NTP服务器设置为本地地址(127.0.0.1)通常用于测试目的,而不是生产环境。在生产环境中,你通常会配置为可靠的公共NTP服务器或内部NTP服务器。此外,如果你打算将CentOS作为NTP服务器使用,你需要安装并配置NTP服务软件(如ntp或chrony),而不仅仅是客户端。

如果你的系统上没有ntpq命令,你可能需要先安装NTP工具包。

sudo yum install ntp-utils
最后,请确保在进行任何系统配置更改时都要谨慎,并理解每项更改的含义和潜在影响。

而且在修改过程中,我们只需要点击将代码插入到终端就可以,十分方便,复制粘贴的步骤都省略了

44

3.2 挂载硬盘

我需要再服务器上新插入一块硬盘,并挂载在/mnt目录

45

当需要挂载硬盘到具体目录时,我们可以通过Comate助手生成挂载指令,并按照步骤操作即可

在服务器上插入新硬盘并挂载到/mnt目录,通常需要以下步骤:

物理插入硬盘: 首先,确保服务器已经关闭或处于安全状态,然后物理地将新硬盘插入到服务器的硬盘槽中。

检测新硬盘: 重启服务器后,使用lsblk或fdisk -l命令来查看新插入的硬盘是否被系统识别。

lsblk
# 或者
fdisk -l
假设新硬盘的设备名是/dev/sdb(这只是一个示例,实际情况可能会有所不同)。

分区硬盘(如果需要): 如果硬盘还没有分区,你需要先分区。这通常使用fdisk或parted工具来完成。

sudo fdisk /dev/sdb
在fdisk命令中,你可以使用n来创建新分区,使用w来保存更改并退出。

如果你想要使用整个硬盘而不创建分区,可以直接使用/dev/sdb(而不是分区,如/dev/sdb1)。

格式化分区: 分区创建完毕后,你需要对分区进行格式化。选择文件系统类型(如ext4),并使用mkfs命令。

sudo mkfs.ext4 /dev/sdb1
注意:请确保替换/dev/sdb1为你实际创建的分区设备名。

创建挂载点: 在/mnt目录下创建一个子目录作为新硬盘的挂载点。

sudo mkdir /mnt/newdisk
挂载硬盘: 使用mount命令将硬盘挂载到刚刚创建的挂载点。

sudo mount /dev/sdb1 /mnt/newdisk
如果你想要硬盘在系统启动时自动挂载,你需要编辑/etc/fstab文件。使用文本编辑器(如nano或vim)添加一行描述如何挂载硬盘。

sudo nano /etc/fstab
在文件末尾添加类似以下内容:

/dev/sdb1   /mnt/newdisk   ext4   defaults   0   2
确保替换/dev/sdb1和ext4为实际的分区和设备类型。

检查挂载: 使用df -h命令来检查硬盘是否成功挂载。

df -h
你应该能在输出中看到新挂载的硬盘。

46

3.3 查看增加网卡信息

我想要给linux主机增加一块虚拟网卡

网卡名称为comate,静态ip为192.168.1.123,网关为255.255.255.0

47

您想要给Linux主机增加一块虚拟网卡,并为其配置静态IP地址和网关。在Linux中,这通常是通过创建虚拟网络接口(如tun或tap接口,或者使用ip命令创建别名接口)或使用虚拟化技术(如Docker、KVM等)来实现的。

如果您只是想在现有的物理网卡上创建一个别名接口并为其配置IP地址,您可以按照以下步骤操作:

查看现有网卡: 首先,您需要知道现有的物理网卡名称。您可以使用ip a或ifconfig(如果您安装了net-tools)来查看。

创建别名接口: 假设您的物理网卡是eth0,您可以为它创建一个别名接口eth0:0。但请注意,接口名称comate不是Linux标准的接口命名方式。如果您只是想给这个接口一个特定的名称并在本地识别它,那么可以使用eth0:0这样的别名。如果您确实需要一个名为comate的接口,那么您可能需要使用其他技术或工具,比如ip link add来创建一个新的虚拟网络接口。

配置IP地址和网关: 为别名接口配置IP地址和网关。

下面是一个基本的示例,展示了如何为eth0创建一个别名接口并配置IP地址:

# 假设您的物理网卡是eth0
sudo ip addr add 192.168.1.123/24 dev eth0:0
sudo ip link set eth0:0 up
但是,请注意以下几点:

网关通常配置在路由表中,而不是直接配置在接口上。而且,您提供的网关255.255.255.0实际上是一个子网掩码,而不是网关地址。您需要确定正确的网关地址,并使用ip route或route命令来配置它。

上述命令只会临时设置IP地址。如果您想在重启后保留这些设置,您需要将它们添加到网络配置文件中,这取决于您使用的Linux发行版和网络管理工具。

如果您真的需要一个名为comate的虚拟网络接口,并希望它具有特定的IP地址和配置,那么您可能需要深入研究Linux的网络虚拟化技术或使用第三方工具来实现这一点。

image-20240521010334911

3.4创建linux主机新用户

运维人员直接使用root用户执行命令存在较大的风险,root用户拥有系统中的最高权限,可以不受限制地访问和修改系统的所有文件和设置。一旦误操作或者受到恶意攻击,可能导致系统崩溃、数据丢失或被篡改等严重后果。

所以我需要为临时运维人员创建一个weihu账号,账号密码为qwer_123,使用期限为7天。只可以访问自己的home目录的文件

48

为了为临时运维人员创建一个账号,并设置相应的权限和期限,您可以按照以下步骤操作:

创建账号:
使用useradd命令来创建一个新的用户。例如,要创建一个名为weihu的用户,您可以执行:

sudo useradd weihu
设置密码:
使用passwd命令为weihu用户设置密码qwer_123:

sudo passwd weihu
当提示您输入新密码时,输入qwer_123。

限制访问:
为了限制weihu用户只能访问其home目录,您可以使用usermod命令来更改其默认的shell为/usr/sbin/nologin或/usr/sbin/rssh(如果您的系统上有rssh的话)。然后,您可以为weihu用户创建一个.bashrc或.bash_profile文件,在该文件中使用cd命令将用户重定向到其home目录。

但是,请注意,这并不完全是一个安全的解决方案,因为用户仍然可以通过其他方式访问系统。为了更安全地限制用户的访问,您可能需要考虑使用更复杂的工具或策略,如chroot环境或sudo规则。

对于简单的情况,您可以在/etc/passwd文件中更改weihu用户的shell为/bin/false,这样用户将不能登录shell。然后,当需要时,您可以使用sudo -u weihu来执行命令。

设置账号过期日期:
使用chage命令可以为用户设置账号的过期日期。例如,要为weihu用户设置账号在7天后过期,您可以执行:

sudo chage -E $(date -d "+7 days" +%Y-%m-%d) weihu
这将设置账号的过期日期为从现在开始的7天后。

其他注意事项:

确保在创建用户时,没有为其分配任何sudo权限或其他特权。
定期检查并清理不再需要的临时账号。
对于敏感系统,最好使用更安全的身份验证和访问控制策略。

上述我们通过执行一些基本的linux环境下的运维操作来体验了如何使用Comate来帮助运维工程师提高运维效率,可以看出Comate非常的友好对于运维工程师,生成的指令可以直接意见运行在对应的主机服务器。

4. 使用Comate进行运维操作

4.1 自动化编程shell脚本

编写shell脚本执行linux运维命令可以极大的提高运维人员的工作效率,避免重复造轮子。如果shell脚本也可以使用Cmte来自动生成,运维人员只需要进行把关,那么运维人员的工作效率会有进一步的提升。

下面使用Comate编程助手生成一个shell脚本工具

我需要在/mnt目录下生成一个shell脚本,用于每2分钟将主机的内存使用率保存在txt文本中,并将文本保存在/mnt目录下

49

生成的操作步骤很详细,

你可以使用以下的步骤来创建一个shell脚本,该脚本每两分钟执行一次,将主机的内存使用率保存到/mnt目录下的txt文件中:

创建shell脚本
打开终端,并切换到/mnt目录:

cd /mnt
使用文本编辑器(如nano、vim等)创建一个新的shell脚本文件,例如memory_usage.sh:

nano memory_usage.sh
编辑shell脚本
在打开的编辑器中,输入以下内容:

#!/bin/bash

# 获取内存使用率,并保存到txt文件中
memory_usage=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')
echo "$(date '+%Y-%m-%d %H:%M:%S') - Memory Usage: $memory_usage" >> /mnt/memory_usage.txt
这个脚本首先使用free -m命令获取内存信息,然后使用awk命令计算内存使用率。接着,它使用date命令获取当前时间,并将时间和内存使用率一起追加到/mnt/memory_usage.txt文件中。

保存并关闭文件。

给脚本执行权限
在终端中,为脚本添加执行权限:
chmod +x /mnt/memory_usage.sh
使用cron定时执行脚本
要每两分钟执行一次这个脚本,你可以使用cron。首先,编辑当前用户的cron任务:
crontab -e
在打开的编辑器中,添加以下行:

*/2 * * * * /mnt/memory_usage.sh
这表示每两分钟执行一次/mnt/memory_usage.txt脚本。

保存并关闭文件。现在,你的脚本应该每两分钟执行一次,并将内存使用率保存到/mnt/memory_usage.txt文件中。

安装操作后,可以生成可执行shell脚本

查看执行后的效果

image-20240521012257785

4.2 命令解释器

在我们运维过程中遇到看不到的配置文件时,一般需要去查询网上资料或者操作文档。通过Coamte,我们可以快速的了解配置文件的构造和含义。

例如,我想要了解/etc/sysconfig/network-scripts/ifcfg-eth0配置文件的含义

DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="yes"

详细解释

你给出的代码片段是Linux系统中网络接口的配置文件的一部分,通常是用于/etc/sysconfig/network-scripts/目录下的ifcfg-<接口名>文件。这段代码配置了一个名为"eth0"的以太网接口。

让我们详细解释一下这些参数:

DEVICE="eth0":这指定了要配置的接口的名称,这里是"eth0"BOOTPROTO="dhcp":这表示在启动时,该接口应该使用DHCP(动态主机配置协议)来获取IP地址和其他网络设置。

ONBOOT="yes":这表示在系统启动时,这个网络接口应该被激活。

TYPE="Ethernet":这指定了接口的类型,这里是以太网。

PERSISTENT_DHCLIENT="yes":这表示dhclient(DHCP客户端)应该为这个接口保持其配置,即使在接口被重新命名或重新编号之后。

然而,需要注意的是,你的代码片段中有重复的部分。通常,每个参数只需要在配置文件中出现一次。如果你将这段代码直接复制到配置文件中,那么你需要删除重复的部分,否则可能会引发配置错误。

正确的配置可能如下所示:
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="yes"
最后,记住,更改网络配置文件后,通常需要重启网络服务或整个系统才能使更改生效。具体的命令可能会因Linux发行版的不同而有所差异,但通常可以使用systemctl restart network或service network restart等命令来重启网络服务。

4.3 自动生成SQL语句

对于数据库运维人员,也就是DBA来说,需要经常涉及到数据库的建表,查询,调优等工作

当使用Comate生成DDL语句时,看一下使用效果

创建一个用户信息表,包括用户ID,性别,年龄,身高,体重,毕业学校,工作地点。同时生成19条数据

51

生成的DDL语句可以正常执行,但是后面部分却出现了明显的错误

我想要生成19条数据,只生成了3条,且后面生成内容与结果无关

image-20240521013504366

您提到的内容似乎分为两个部分:一部分是关于创建数据库表并生成数据,另一部分是网络配置的信息。我会分别为您处理这两部分内容。

首先,关于创建用户信息表并生成数据,这通常涉及到数据库操作。这里我假设您使用的是MySQL数据库,并为您提供相应的SQL语句。

创建用户信息表
CREATE TABLE user_info (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    gender ENUM('男', '女') NOT NULL,
    age INT NOT NULL,
    height DECIMAL(5, 2) NOT NULL,
    weight DECIMAL(5, 2) NOT NULL,
    graduation_school VARCHAR(255) NOT NULL,
    work_location VARCHAR(255) NOT NULL
);
生成19条数据
为了简化,我会使用随机数据来填充这个表。请注意,这些数据是随机生成的,可能不符合实际情况。

INSERT INTO user_info (gender, age, height, weight, graduation_school, work_location) VALUES
('男', 25, 175.50, 65.00, '北京大学', '北京'),
('女', 30, 162.25, 50.00, '清华大学', '上海'),

-- ... 您可以继续添加更多的数据行,直到达到19条为止
('男', 22, 180.00, 75.00, '复旦大学', '深圳');
您可以根据需要修改或添加更多的数据行。

接下来,关于网络配置的信息,您提供的内容似乎是Linux系统中网络接口的配置信息。这些设置通常放在/etc/sysconfig/network-scripts/ifcfg-<DEVICE>文件中,其中<DEVICE>是网络接口的名称(在您的例子中是eth0)。

如果您想应用这些设置,您可以按照以下步骤操作:

打开终端。

使用root或具有sudo权限的用户登录。

创建一个新的配置文件或编辑现有的配置文件,例如:sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0。

将您提供的配置信息粘贴到文件中:

DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="yes"
保存并关闭文件。

重启网络服务或整个系统,以使配置生效。

请注意,根据您的Linux发行版和版本,网络配置的具体步骤和文件位置可能会有所不同。上述步骤是基于Red Hat系列的发行版(如CentOS或Fedora)的通用做法。如果您使用的是其他发行版,请查阅相应的文档以获取正确的配置方法。

5.改进建议

5.1 刷新后历史记录丢失

当关掉IDE界面后再打开所属项目,查询过的comate命令会丢失,建议可以长期保存Comate输入过的命令,方便使用人员查找。

而且当前不能手动删除查询的结果

5.2 建议增加对shell语句识别能力

目前,Comate只支持编程语言,对于shell等语言还不能够很好的支持

image-20240521005840937

5.3 保证执行命令准确性

因为运维工程师执行的操作由于涉及到系统的稳定性,如果执行了错误的指令,可能导致很严重的后果。在我用Coamte的过程中,部分命令生成的并不是完全正确,有的只是临时性的命令,重启主机会失效,需要写入配置文件才可以

5.4 保证生成内容相关性

在使用Comate过程中,会生成部分和提问语句无关的内容,干扰正常操作流程,希望后续可以提供准确性

6. Comate使用总结

在网上浏览Comate的资料时,发现大部分程序员使用Comate主要用来编程算法使用和修改前端项目优化代码,很少人用户系统运维。因为运维是一个很需要经验的岗位,但是Coamte的使用可以极大的帮助运维人员减少造轮子的重复操作。提高运维效率。在整体使用下来,Comate编程助手整体上表现不错,但是也有一些不足,已经在第5部分展示。希望未来Coamte编程助手可以继续改进,做大做强~

欢迎感兴趣的小伙伴体验Baidu Comate智能代码助手:https://comate.baidu.com/zh/shopping?inviteCode=ym6xy2bb

更多推荐