### 添加epel yum源
[hadoop@hadoop02 epel]$ wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[hadoop@hadoop02 epel]$ sudo rpm -ivh epel-release-latest-7.noarch.rpm
warning: epel-release-latest-7.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:epel-release-7-14 ################################# [100%]
yum install --downloadonly --downloaddir=/opt/module/jq jq
yum 只下载不安装
[hadoop@hadoop02 jq]$ ll
total 352
-rw-r--r-- 1 root root 171058 2020-05-29 01:31:41 jq-1.6-2.el7.x86_64.rpm
-rw-r--r-- 1 root root 185285 2022-06-14 11:35:36 oniguruma-6.8.2-2.el7.x86_64.rpm
[hadoop@hadoop02 jq]$ rm -rf *
[hadoop@hadoop02 jq]$ sudo yum install --downloadonly --downloaddir=/opt/module/jq jq
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* centos-gluster9: mirrors.aliyun.com
* epel: hkg.mirror.rackspace.com
* extras: mirrors.ustc.edu.cn
* updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package jq.x86_64 0:1.6-2.el7 will be installed
--> Processing Dependency: libonig.so.5()(64bit) for package: jq-1.6-2.el7.x86_64
--> Running transaction check
---> Package oniguruma.x86_64 0:6.8.2-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================
Installing:
jq x86_64 1.6-2.el7 epel 167 k
Installing for dependencies:
oniguruma x86_64 6.8.2-2.el7 epel 181 k
Transaction Summary
=============================================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 348 k
Installed size: 1.0 M
Background downloading packages, then exiting:
(1/2): oniguruma-6.8.2-2.el7.x86_64.rpm | 181 kB 00:00:00
(2/2): jq-1.6-2.el7.x86_64.rpm | 167 kB 00:00:00
---------------------------------------------------------------------------------------------------------------------------------------------
Total 364 kB/s | 348 kB 00:00:00
exiting because "Download Only" specified
[hadoop@hadoop02 jq]$ ll
total 352
-rw-r--r-- 1 root root 171058 2020-05-29 01:31:41 jq-1.6-2.el7.x86_64.rpm
-rw-r--r-- 1 root root 185285 2022-06-14 11:35:36 oniguruma-6.8.2-2.el7.x86_64.rpm
yum 查看安装依赖
[hadoop@hadoop02 jq]$ yum deplist jq
...
package: jq.x86_64 1.6-2.el7
dependency: /sbin/ldconfig
provider: glibc.x86_64 2.17-326.el7_9
provider: glibc.i686 2.17-326.el7_9
dependency: ld-linux-x86-64.so.2()(64bit)
provider: glibc.x86_64 2.17-326.el7_9
dependency: ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)
provider: glibc.x86_64 2.17-326.el7_9
dependency: libc.so.6(GLIBC_2.14)(64bit)
provider: glibc.x86_64 2.17-326.el7_9
dependency: libm.so.6()(64bit)
provider: glibc.x86_64 2.17-326.el7_9
dependency: libm.so.6(GLIBC_2.2.5)(64bit)
provider: glibc.x86_64 2.17-326.el7_9
dependency: libonig.so.5()(64bit)
provider: oniguruma.x86_64 6.8.2-2.el7
dependency: rtld(GNU_HASH)
provider: glibc.x86_64 2.17-326.el7_9
provider: glibc.i686 2.17-326.el7_9
jq使用
参考:http://www.manongjc.com/detail/56-jbctkhfqfgbonft.html
jq 官网
json 格式化输出
[root@k8s-master-01 jq]# curl -G -X GET --data-urlencode 'query=container_start_time_seconds{name=~"k8s_glusterfs_glusterfs.*$"}' http://10.0.2.37:30090/api/v1/query -s | jq .
{
"status": "success",
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"__name__": "container_start_time_seconds",
"beta_kubernetes_io_arch": "amd64",
"beta_kubernetes_io_os": "linux",
"container": "glusterfs",
"datanode": "hdfs-datanode",
"fdfs_storage": "storage",
"hadoop_type": "namenode",
"id": "/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podd47758fe_e6fa_486b_b049_6cb154fec36c.slice/docker-662f4f87c9944bfad6664d40d342a2484b8517815905b7f3acf38f51e80c1e51.scope",
"image": "sha256:e67c55cd4ba0f4117d3785b34ae7c5fddcb62289a83752ff0a882894e0a14410",
"instance": "k8s-storage-03",
"job": "kubernetes-nodes-cadvisor",
"kafkanode": "kafka",
"kubernetes_io_arch": "amd64",
"kubernetes_io_hostname": "k8s-storage-03",
"kubernetes_io_os": "linux",
"mongodb_node": "mongodb",
"name": "k8s_glusterfs_glusterfs-b5t77_default_d47758fe-e6fa-486b-b049-6cb154fec36c_1",
"namenode": "hdfs-namenode",
"namespace": "default",
"pod": "glusterfs-b5t77",
"storagenode": "glusterfs"
},
"value": [
1672800587.73,
"1672179040"
]
},
...
json 选择标签输出
[root@k8s-master-01 jq]# curl -G -X GET --data-urlencode 'query=container_start_time_seconds{name=~"k8s_glusterfs_glusterfs.*$"}' http://10.0.2.37:30090/api/v1/query -s | jq .data
{
"resultType": "vector",
"result": [
{
"metric": {
"__name__": "container_start_time_seconds",
"beta_kubernetes_io_arch": "amd64",
"beta_kubernetes_io_os": "linux",
"container": "glusterfs",
"datanode": "hdfs-datanode",
"fdfs_storage": "storage",
"hadoop_type": "namenode",
"id": "/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podd47758fe_e6fa_486b_b049_6cb154fec36c.slice/docker-662f4f87c9944bfad6664d40d342a2484b8517815905b7f3acf38f51e80c1e51.scope",
"image": "sha256:e67c55cd4ba0f4117d3785b34ae7c5fddcb62289a83752ff0a882894e0a14410",
"instance": "k8s-storage-03",
"job": "kubernetes-nodes-cadvisor",
"kafkanode": "kafka",
"kubernetes_io_arch": "amd64",
"kubernetes_io_hostname": "k8s-storage-03",
"kubernetes_io_os": "linux",
"mongodb_node": "mongodb",
"name": "k8s_glusterfs_glusterfs-b5t77_default_d47758fe-e6fa-486b-b049-6cb154fec36c_1",
"namenode": "hdfs-namenode",
"namespace": "default",
"pod": "glusterfs-b5t77",
"storagenode": "glusterfs"
},
"value": [
1672800767.746,
"1672179040"
]
}
...
]
}
### 层级输出
[root@k8s-master-01 jq]# curl -G -X GET --data-urlencode 'query=container_start_time_seconds{name=~"k8s_glusterfs_glusterfs.*$"}' http://10.0.2.37:30090/api/v1/query -s | jq .data.result
[
{
"metric": {
"__name__": "container_start_time_seconds",
"beta_kubernetes_io_arch": "amd64",
"beta_kubernetes_io_os": "linux",
"container": "glusterfs",
"datanode": "hdfs-datanode",
"fdfs_storage": "storage",
"hadoop_type": "namenode",
"id": "/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podd47758fe_e6fa_486b_b049_6cb154fec36c.slice/docker-662f4f87c9944bfad6664d40d342a2484b8517815905b7f3acf38f51e80c1e51.scope",
"image": "sha256:e67c55cd4ba0f4117d3785b34ae7c5fddcb62289a83752ff0a882894e0a14410",
"instance": "k8s-storage-03",
"job": "kubernetes-nodes-cadvisor",
"kafkanode": "kafka",
"kubernetes_io_arch": "amd64",
"kubernetes_io_hostname": "k8s-storage-03",
"kubernetes_io_os": "linux",
"mongodb_node": "mongodb",
"name": "k8s_glusterfs_glusterfs-b5t77_default_d47758fe-e6fa-486b-b049-6cb154fec36c_1",
"namenode": "hdfs-namenode",
"namespace": "default",
"pod": "glusterfs-b5t77",
"storagenode": "glusterfs"
},
"value": [
1672800774.207,
"1672179040"
]
}
...
]
[root@k8s-master-01 jq]# curl -G -X GET --data-urlencode 'query=container_start_time_seconds{name=~"k8s_glusterfs_glusterfs.*$"}' http://10.0.2.37:30090/api/v1/query -s | jq .data.result[0].value
[
1672800789.201,
"1672179040"
]
[root@k8s-master-01 jq]# curl -G -X GET --data-urlencode 'query=container_start_time_seconds{name=~"k8s_glusterfs_glusterfs.*$"}' http://10.0.2.37:30090/api/v1/query -s | jq .data.result[0].value[1]
"1672179040"
[root@k8s-master-01 jq]#
jq 条件过滤
[root@k8s-master-01 jq]# curl -G -X GET --data-urlencode 'query=container_start_time_seconds{name=~"k8s_glusterfs_glusterfs.*$"}' http://10.0.2.37:30090/api/v1/query -s | jq '.data.result[] | select(.metric.name == "k8s_glusterfs_glusterfs-62kns_default_51f3068f-05a9-4230-9249-212acd425cb0_0")'
{
"metric": {
"__name__": "container_start_time_seconds",
"beta_kubernetes_io_arch": "amd64",
"beta_kubernetes_io_os": "linux",
"container": "glusterfs",
"datanode": "hdfs-datanode",
"fdfs_storage": "storage",
"hadoop_type": "namenode",
"id": "/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod51f3068f_05a9_4230_9249_212acd425cb0.slice/docker-aff2cbe63838a1625909e6b9b8286f2622996751054eebdc7f55dd8ad8772551.scope",
"image": "sha256:e67c55cd4ba0f4117d3785b34ae7c5fddcb62289a83752ff0a882894e0a14410",
"instance": "k8s-storage-02",
"job": "kubernetes-nodes-cadvisor",
"kafkanode": "kafka",
"kubernetes_io_arch": "amd64",
"kubernetes_io_hostname": "k8s-storage-02",
"kubernetes_io_os": "linux",
"mongodb_node": "mongodb",
"name": "k8s_glusterfs_glusterfs-62kns_default_51f3068f-05a9-4230-9249-212acd425cb0_0",
"namenode": "hdfs-namenode",
"namespace": "default",
"pod": "glusterfs-62kns",
"storagenode": "glusterfs"
},
"value": [
1672801040.311,
"1658484568"
]
}
[root@k8s-master-01 prometheus]# curl -G -X GET --data-urlencode 'query=(kube_pod_container_status_running == 1)' http://10.0.2.37:30090/api/v1/query -s | jq '.data.result[]| select(.metric.__name__ == "kube_pod_container_status_running") | select(.metric.pod | contains("kafka-1")) ' | jq -r '{instance: .metric.instance, pod: .metric.pod, name: .metric.__name__, value: .value[1]}'
{
"instance": "10.244.12.140:8080",
"pod": "kafka-1",
"name": "kube_pod_container_status_running",
"value": "1"
}
格式新数据结构
https://stedolan.github.io/jq/manual/?#example84
jq -r
:如果过滤的结果是一个字符串,那么直接写到标准输出(去掉字符串的引号)
[root@k8s-master-01 module]# curl -G -X GET --data-urlencode 'query=sum by(name,pod,instance) (container_start_time_seconds{name=~"k8s_glusterfs_glusterfs.*$"})' http://10.0.2.37:30090/api/v1/query -s | jq '.data.result[] | select(.metric.name == "k8s_glusterfs_glusterfs-62kns_default_51f3068f-05a9-4230-9249-212acd425cb0_0")'| jq -r '{instance: .metric.instance, pod: .metric.pod, name: .metric.name, value: .value[1]}'
{
"instance": "k8s-storage-02",
"pod": "glusterfs-62kns",
"name": "k8s_glusterfs_glusterfs-62kns_default_51f3068f-05a9-4230-9249-212acd425cb0_0",
"value": "1658484568"
}
jq -R
:不作为 JSON 解析,将每一行的文本作为字符串输出到屏幕。
[root@k8s-master-01 module]# tail -n+2 data.txt|jq -R '[splits("\\s+")] | {id:.[0]|tonumber, name:.[1], age:.[2], score:.[3]}' -c
{"id":1,"name":"zhangsan","age":"17","score":"75"}
{"id":2,"name":"lisi","age":"16","score":"80"}
{"id":3,"name":"wangwu","age":"18","score":"85"}