go语言开发求助
现在有个需求:想用go开发一个类似zbx-agent的插件,主要获取服务器资源信息,比如几个cpu,内存多少,硬盘多大,请问大佬这个该怎么写呢? 这个需求可以通过Go的一些第三方库和内置库来实现。这里给你一个简单的示例代码,以帮助你了解如何编写类似Zabbix Agent的插件,来获取服务器的CPU、内存和硬盘信息。
1. 安装必要的库:
go get github.com/shirou/gopsutil/cpu
go get github.com/shirou/gopsutil/mem
go get github.com/shirou/gopsutil/disk
2. 创建一个名为`main.go`的文件,并输入以下代码:
package main
import (
"fmt"
"github.com/shirou/gopsutil/cpu"
"github.com/shirou/gopsutil/disk"
"github.com/shirou/gopsutil/mem"
)
func main() {
// 获取CPU信息
cpuInfo, err := cpu.Info()
if err != nil {
fmt.Println("无法获取CPU信息:", err)
return
}
// 获取内存信息
memInfo, err := mem.VirtualMemory()
if err != nil {
fmt.Println("无法获取内存信息:", err)
return
}
// 获取硬盘信息
diskPartitions, err := disk.Partitions(true)
if err != nil {
fmt.Println("无法获取硬盘信息:", err)
return
}
// 打印获取到的信息
fmt.Println("CPU信息:")
for _, info := range cpuInfo {
fmt.Printf("型号: %v 核心数: %v\n", info.ModelName, info.Cores)
}
fmt.Println("\n内存信息:")
fmt.Printf("总内存: %v MB 已使用内存: %v MB\n", memInfo.Total/1024/1024, memInfo.Used/1024/1024)
fmt.Println("\n硬盘信息:")
for _, partition := range diskPartitions {
usage, _ := disk.Usage(partition.Mountpoint)
fmt.Printf("设备: %v 容量: %v GB 已使用: %v GB\n", partition.Device, usage.Total/1024/1024/1024, usage.Used/1024/1024/1024)
}
}
3. 运行代码:
go run main.go
以上示例代码将获取服务器的CPU、内存和硬盘信息,并打印出来。你可以根据需要对代码进行修改以满足你的需求。
注意:在使用`gopsutil`库时,某些操作可能需要管理员权限。在运行时可能需要使用`sudo`命令。 isdkz 发表于 2023-4-25 16:28
这个需求可以通过Go的一些第三方库和内置库来实现。这里给你一个简单的示例代码,以帮助你了解如何编写类似 ...
嗯,好的,谢谢大佬{:5_110:} liubulong 发表于 2023-4-25 17:15
嗯,好的,谢谢大佬
不客气{:5_110:} isdkz 发表于 2023-4-25 16:28
这个需求可以通过Go的一些第三方库和内置库来实现。这里给你一个简单的示例代码,以帮助你了解如何编写类似 ...
我想再问一下,那可以编译成一个安装包吗?类似zbx-agent的这样的程序,然后下发给每个服务器去执行,然后定时任务去跑这个程序,类似埋点,需要的时候去启动执行任务,不需要的时候就不运行。 liubulong 发表于 2023-4-26 13:58
我想再问一下,那可以编译成一个安装包吗?类似zbx-agent的这样的程序,然后下发给每个服务器去执行,然 ...
可以的,你可以将你的Go程序编译成一个可执行文件,然后将它部署到每个服务器上。对于定时任务,你可以使用服务器上的计划任务(如Linux的`cron`或Windows的任务计划程序)来实现。
1. 首先,你需要将你的Go程序编译成一个可执行文件。在项目的根目录下,运行以下命令:
go build -o agent
这将生成一个名为`agent`(在Windows系统中为`agent.exe`)的可执行文件。
2. 接下来,将这个可执行文件部署到服务器上。你可以通过SCP、FTP等方式将文件传输到目标服务器。
3. 配置定时任务。以下是在Linux和Windows上设置定时任务的方法:
- 对于Linux(使用`cron`):
1. 在目标服务器上,使用`crontab -e`命令打开当前用户的计划任务列表。
2. 添加一行如下所示的定时任务(此示例每5分钟运行一次程序,你可以根据需求调整时间间隔):
*/5 * * * * /path/to/your/agent
3. 保存并退出编辑器,`cron`将自动加载更改。
- 对于Windows(使用任务计划程序):
1. 打开“任务计划程序”。
2. 选择“创建基本任务”并按照向导进行操作。设置任务的名称和描述,触发器选择“按计划”,然后设置任务的运行时间和重复间隔。
3. 在“操作”部分,选择“启动程序”,然后浏览到你的可执行文件的路径。
4. 完成向导,你的任务将按计划运行。
如此一来,你的Go程序将作为一个定时任务在服务器上运行。当然,你可以根据自己的需求调整定时任务的运行频率。根据需要启动或停止任务,只需在计划任务管理器中启用或禁用相应的任务即可。 isdkz 发表于 2023-4-26 14:31
可以的,你可以将你的Go程序编译成一个可执行文件,然后将它部署到每个服务器上。对于定时任务,你可以使 ...
嗯,好的,谢谢,我去测试一下看看 isdkz 发表于 2023-4-25 16:28
这个需求可以通过Go的一些第三方库和内置库来实现。这里给你一个简单的示例代码,以帮助你了解如何编写类似 ...
在执行这几个命令的时候报错了,麻烦帮忙解答一下,谢谢
执行如下:
go get github.com/shirou/gopsutil/cpu
go get github.com/shirou/gopsutil/mem
go get github.com/shirou/gopsutil/disk
报错信息如下:
# go get github.com/shirou/gopsutil/cpu
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
# go get github.com/shirou/gopsutil/mem
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
# go get github.com/shirou/gopsutil/disk
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
# go install github.com/shirou/gopsutil/cpu
go: 'go install' requires a version when current directory is not in a module
Try 'go install github.com/shirou/gopsutil/cpu@latest' to install the latest version
liubulong 发表于 2023-4-26 16:44
在执行这几个命令的时候报错了,麻烦帮忙解答一下,谢谢
执行如下:
go get github.com/shirou/gopsuti ...
从错误信息来看,你在执行这些命令时不在Go模块的目录中。从Go 1.16开始,Go推荐使用Go模块来管理项目的依赖关系。请按照以下步骤操作:
1. 在你的项目目录中初始化一个新的Go模块:
go mod init <module-name>
将`<module-name>`替换为你想要的模块名称,通常是你的项目在代码仓库的导入路径,如`github.com/yourusername/yourprojectname`。
2. 然后在项目的根目录下执行以下命令来安装依赖:
go get github.com/shirou/gopsutil@v3.21.12
这将在你的`go.mod`文件中添加`gopsutil`库作为依赖项。现在,你可以使用以下`import`语句在`main.go`中导入`gopsutil`的子包:
import (
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/mem"
"github.com/shirou/gopsutil/v3/disk"
)
注意:根据你使用的Go版本和`gopsutil`库的版本,导入路径可能略有不同。请根据实际情况调整。在本示例中,我们使用的是`gopsutil` v3.21.12版本。
页:
[1]