2.X/7. Administration Monitoring Deployment

7-1-7. cat API

drscg 2017. 9. 23. 12:37

If you work from the command line often, the cat APIs will be helpful to you. Named after the linux cat command, these APIs are designed to work like *nix command-line tools.

command line에서 작업하는 경우, cat API는 매우 유용하다. linux의 cat 명령어에서 이름을 딴, 이 API는 *nix의 command line tool처럼 동작하도록 설계되었다.

They provide statistics that are identical to all the previously discussed APIs (Health, node-stats, and so forth), but present the output in tabular form instead of JSON. This is very convenient for a system administrator, and you just want to glance over your cluster or find nodes with high memory usage.

이전에 언급했던 API(health, node-stats 등) 모두와 동일한 통계를 제공한다. 하지만, JSON 대신 표 형식으로 출력을 나타낸다. 이것은 시스템 관리자에게, cluster를 한 눈에 살펴보거나, 메모리를 많이 사용하는 node를 찾을 때 매우 편리하다.

Executing a plain GET against the cat endpoint will show you all available APIs:

GET 의 마지막에 cat 을 넣어 실행하면, 이용 가능한 모든 API를 보여준다.

GET /_cat

=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}

Many of these APIs should look familiar to you (and yes, that’s a cat at the top :) ). Let’s take a look at the Cat Health API:

이들 API 중 대부분은 여러분에게 친숙할 것이다. cat health API를 살펴보자.

GET /_cat/health

1408723713 12:08:33 elasticsearch_zach yellow 1 1 114 114 0 0 114

The first thing you’ll notice is that the response is plain text in tabular form, not JSON. The second thing you’ll notice is that there are no column headers enabled by default. This is designed to emulate *nix tools, since it is assumed that once you become familiar with the output, you no longer want to see the headers.

첫 번째는 response가 JSON이 아니라 표 형식에 일반 텍스트이다. 두 번째는 기본적으로 활성화된 칼럼 header가 없다. header가 없는 출력에 익숙하다고 가정했기 때문에, *nix tool을 모방하여 설계되었다.

To enable headers, add the ?v parameter:

header를 활성화하려면, ?v 매개변수를 추가하자.

GET /_cat/health?v

epoch   time    cluster status node.total node.data shards pri relo init
1408[..] 12[..] el[..]  1         1         114 114    0    0     114
unassign

Ah, much better. We now see the timestamp, cluster name, status, the number of nodes in the cluster, and more—all the same information as the cluster-health API.

훨신 낫다. 이제, timestamp, cluster name, status, cluster의 node 수 등을 볼 수 있다. cluster-healthAPI와 모두 동일한 정보이다.

Let’s look at node-stats in the cat API:

cat API에서 node-stats 을 살펴보자.

GET /_cat/nodes?v

host         ip            heap.percent ram.percent load node.role master name
zacharys-air 192.168.1.131           45          72 1.85 d         *      Zach

We see some stats about the nodes in our cluster, but the output is basic compared to the full node-stats output. You can include many additional metrics, but rather than consulting the documentation, let’s just ask the cat API what is available.

cluster의 node에 대한 몇 가지 통계를 볼 수 있지만, 전체 node-stats 출력과 비교하면, 기본적인 것이다. 거기에 많은 통계를 추가할 수 있는데, 참조 문서를 참고하는 것보다, 이용할 수 있는 API를 cat 에게 물어보자.

You can do this by adding ?help to any API:

특정 API에 ?help 를 추가하면 된다.

GET /_cat/nodes?help

id               | id,nodeId               | unique node id
pid              | p                       | process id
host             | h                       | host name
ip               | i                       | ip address
port             | po                      | bound transport port
version          | v                       | es version
build            | b                       | es build hash
jdk              | j                       | jdk version
disk.avail       | d,disk,diskAvail        | available disk space
heap.percent     | hp,heapPercent          | used heap ratio
heap.max         | hm,heapMax              | max configured heap
ram.percent      | rp,ramPercent           | used machine memory ratio
ram.max          | rm,ramMax               | total machine memory
load             | l                       | most recent load avg
uptime           | u                       | node uptime
node.role        | r,role,dc,nodeRole      | d:data node, c:client node
master           | m                       | m:master-eligible, *:current master
...
...

(Note that the output has been truncated for brevity).

The first column shows the full name, the second column shows the short name, and the third column offers a brief description about the parameter. Now that we know some column names, we can ask for those explicitly by using the ?h parameter:

첫 번째 칼럼은 full name 을, 두 번째는 short name 을, 그리고 세 번째는 매개변수에 대한 간단한 설명을 제공한다. 이제 몇 개의 칼럼 이름을 알았고, ?h 매개변수를 사용하여, 명시적으로 request할 수 있다.

GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax

ip            port heapPercent heapMax
192.168.1.131 9300          53 990.7mb

Because the cat API tries to behave like *nix utilities, you can pipe the output to other tools such as sort grep or awk. For example, we can find the largest index in our cluster by using the following:

cat API는 *nix 유틸리티처럼 동작하려 하기 때문에, sortgrepawk 처럼, 다른 tool로 출력을 보낼 수 있다. 예를 들어, 아래처럼 사용하여, cluster에서 가장 큰 index를 찾을 수 있다.

% curl 'localhost:9200/_cat/indices?bytes=b' | sort -rnk8

yellow test_names         5 1 3476004 0 376324705 376324705
yellow .marvel-2014.08.19 1 1  263878 0 160777194 160777194
yellow .marvel-2014.08.15 1 1  234482 0 143020770 143020770
yellow .marvel-2014.08.09 1 1  222532 0 138177271 138177271
yellow .marvel-2014.08.18 1 1  225921 0 138116185 138116185
yellow .marvel-2014.07.26 1 1  173423 0 132031505 132031505
yellow .marvel-2014.08.21 1 1  219857 0 128414798 128414798
yellow .marvel-2014.07.27 1 1   75202 0  56320862  56320862
yellow wavelet            5 1    5979 0  54815185  54815185
yellow .marvel-2014.07.28 1 1   57483 0  43006141  43006141
yellow .marvel-2014.07.21 1 1   31134 0  27558507  27558507
yellow .marvel-2014.08.01 1 1   41100 0  27000476  27000476
yellow kibana-int         5 1       2 0     17791     17791
yellow t                  5 1       7 0     15280     15280
yellow website            5 1      12 0     12631     12631
yellow agg_analysis       5 1       5 0      5804      5804
yellow v2                 5 1       2 0      5410      5410
yellow v1                 5 1       2 0      5367      5367
yellow bank               1 1      16 0      4303      4303
yellow v                  5 1       1 0      2954      2954
yellow p                  5 1       2 0      2939      2939
yellow b0001_072320141238 5 1       1 0      2923      2923
yellow ipaddr             5 1       1 0      2917      2917
yellow v2a                5 1       1 0      2895      2895
yellow movies             5 1       1 0      2738      2738
yellow cars               5 1       0 0      1249      1249
yellow wavelet2           5 1       0 0       615       615

By adding ?bytes=b, we disable the human-readable formatting on numbers and force them to be listed as bytes. This output is then piped into sort so that our indices are ranked according to size (the eighth column).

?bytes=b 를 추가하여, 숫자를 읽기 쉬운 형식으로 표시하는 것을 비활성화하고, 강제로 byte로 표시한다. 그 다음에, index를 크기에 따라 정렬(8번째 칼럼)하기 위해, 이 출력은 sort 로 전달된다.

Unfortunately, you’ll notice that the Marvel indices are clogging up the results, and we don’t really care about those indices right now. Let’s pipe the output through grep and remove anything mentioning Marvel:

불행히도, marvel indices가 결과를 채우고 있다. 지금은 그 indices에 대해 관심이 없다. grep 으로 출력을 보내, marvel이 언급된 모든 것을 제거하자.

% curl 'localhost:9200/_cat/indices?bytes=b' | sort -rnk8 | grep -v marvel

yellow test_names         5 1 3476004 0 376324705 376324705
yellow wavelet            5 1    5979 0  54815185  54815185
yellow kibana-int         5 1       2 0     17791     17791
yellow t                  5 1       7 0     15280     15280
yellow website            5 1      12 0     12631     12631
yellow agg_analysis       5 1       5 0      5804      5804
yellow v2                 5 1       2 0      5410      5410
yellow v1                 5 1       2 0      5367      5367
yellow bank               1 1      16 0      4303      4303
yellow v                  5 1       1 0      2954      2954
yellow p                  5 1       2 0      2939      2939
yellow b0001_072320141238 5 1       1 0      2923      2923
yellow ipaddr             5 1       1 0      2917      2917
yellow v2a                5 1       1 0      2895      2895
yellow movies             5 1       1 0      2738      2738
yellow cars               5 1       0 0      1249      1249
yellow wavelet2           5 1       0 0       615       615

Voila! After piping through grep (with -v to invert the matches), we get a sorted list of indices without Marvel cluttering it up.

grep 으로 보낸(-v 는 일치하지 않는 것을 의미) 후에, marvel이 제거된 index의 정렬된 목록을 얻었다.

This is just a simple example of the flexibility of cat at the command line. Once you get used to using cat, you’ll see it like any other *nix tool and start going crazy with piping, sorting, and grepping. If you are a system admin and spend any time SSH’d into boxes, definitely spend some time getting familiar with the cat API.

이것은 command line에서 cat 의 유연성에 대한 간단한 예제이다. cat 사용에 익숙해지면, 그것을 *nix tool처럼 보게 되고, pipe, sort, grep와 함께 사용하게 될 것이다. 관리자이고, ssh daemon과 많은 시간을 보낸다면, 확실히 cat API에 익숙해질 필요가 있다.

'2.X > 7. Administration Monitoring Deployment' 카테고리의 다른 글

7-1-5. Index Stats  (0) 2017.09.23
7-1-6. Pending Tasks  (0) 2017.09.23
7-2. Production Deployment  (0) 2017.09.23
7-2-1. Hardware  (0) 2017.09.23
7-2-2. Java Virtual Machine  (0) 2017.09.23