linuxep笔记 -- 20161031

来源:互联网 发布:python .write 编辑:程序博客网 时间:2024/05/17 23:45


第一步,下载代码:


git clone https://github.com/linuxep/linuxep.git                         --- 还不了解
git clone https://github.com/linuxep/lepv.git                                  --- lepv, 使用docker运行
git clone https://github.com/linuxep/lepd.git --- lepd, local daemon


第二步,编译运行lepd

./build_x86.sh (先在x86上做实验)

./lepd -d&


第三步,使用命令测试lepd

echo "{\"method\":\"ListAllMethod\"}" | nc 127.0.0.1 12307

echo "{\"method\":\"GetProcMeminfo\"}" | nc 127.0.0.1 12307

正确得到lepd的返回,修改了一些字符串,并加了一些打印语句,可以看到。


第四步,阅读lepd代码

main

jrpc_server_init注册listen_cb和connect_cb

jrpc_register_procedure -- 注册各种读取/proc/xxx, command, perf的命令和执行函数

jrpc_server_run 开始进入ev的loop


cJson使用json解析请求和编辑返回信息,以前用过,还比较熟悉。

libev是个eventloop,没用过,但能看出来是一组基于事件的callback函数,回头再仔细研究吧。

read_proc就是直接读取/proc/xxx

run_cmd使用popen启动进程,并得到其运行结果

run_perf_cmd使用system运行perf,并调用popen("perf report", "r");得到结果


总之,lepd通过ev,注册了一堆命令,lepd收到请求之后,就执行相应的命令,从proc中读取信息,或运行procrank, perf等命令,并将信息返回给请求方。


第五步,编译lepv

1)现在docker,sudo wget -qO https://get.docker.com | sh

注意,下载docker后需要运行sudo usermod -aG docker $USER,并重启机器sudo shutdown -r now,否则会出现is docker daemon running on this host的错误。


2)./buildDockerImage.sh编译lepv

没有成功,出现如下信息:

error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/registry-v2/docker/registry/v2/blobs/sha256/17/175259937daf1009f659c64bdc04c0366c20a3eb801747d370032662ccec8070/data?Expires=1477897817&Signature=VpJqCW6EIvFeq-vf0yigPU7cbvyWsURwU6eF1p8NePl1TNz~rkSXmo4Hx-dpTgeEQsa1iV6-DNEYODB-o0jG02trAvKUShJ873tKfLC3oSAVsJZMuwDsaRBVapQUYBXiEE654b-LyT0ik0-2KwnjpvzdZgC6IZV1Z16FvyGf5J8_&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q: dial tcp: lookup dseasb33srnrn.cloudfront.net on 127.0.0.1:53: read udp 127.0.0.1:44406->127.0.0.1:53: i/o timeout

回头要问问怎么解决。


 3)运行./runDockerContainer.sh

等编译好在运行吧。


还有一个问题,在lepv的代码中,没找到如下这些命令,我理解应该是有lepv发送这些请求,lepd运行并返回。

jrpc_register_procedure(&my_server, read_proc, "GetProcModules", "modules");
jrpc_register_procedure(&my_server, run_cmd, "GetCmdFree", "free");
jrpc_register_procedure(&my_server, run_cmd, "GetCmdProcrank", "procrank");
jrpc_register_procedure(&my_server, run_cmd, "GetCmdIostat", "iostat -d -x -k");
jrpc_register_procedure(&my_server, run_cmd, "GetCmdVmstat", "vmstat");



0 0
原创粉丝点击