2017-09-14 64 views
0

我需要监控安装在k8s集群顶部的Elasticsearch(2.4)。我有两个客户端,3个主站和几个数据节点,它们都运行在pod中。在Stackdriver的“如何操作”和帖子“Can I run Google Monitoring Agent inside a Kubernetes Pod?”之后,我在自己的Pod中部署了一个代理。突然间,毕竟在StackDriver中没有Elasticsearch指标。唯一的零。GKE中针对Elasticsearch的StackDriver监控

enter image description here

任何建议都欢迎。

这是我的配置:

弹性服务:

$kubectl describe svc elasticsearch 
Name:   elasticsearch 
Namespace:  default 
Labels:   component=elasticsearch 
      role=client 
Selector:  component=elasticsearch,role=client 
Type:   NodePort 
IP:   <IP> 
Port:   http 9200/TCP 
NodePort:  http <PORT>/TCP 
Endpoints:  <IP>:9200,<IP>:9200 
Session Affinity: None 
No events. 

为Stackdriver部署:

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: stackagent 
spec: 
    replicas: 1 
    strategy: 
    type: Recreate 
    template: 
    metadata: 
     labels: 
     component: monitoring 
     role: stackdriver-agent 
    spec: 
     containers: 
     - name: hslab-data-agent 
     image: StackDriverAgent:version1 

StackDriverAgent:VERSION1泊坞窗:

FROM ubuntu 

WORKDIR /stackdriver 

RUN apt-get update 
RUN apt-get install curl lsb-release libyajl2 -y 
RUN apt-get clean 

COPY ./stackdriver/run.sh run.sh 
COPY ./stackdriver/elasticsearch.conf elasticsearch.conf 

RUN chmod 755 ./run.sh 
CMD ["./run.sh"] 

run.sh :

#!/bin/bash 

curl -O https://repo.stackdriver.com/stack-install.sh 

chmod 755 stack-install.sh 
bash stack-install.sh --write-gcm 

cp ./elasticsearch.conf /opt/stackdriver/collectd/etc/collectd.d/ 

service stackdriver-agent restart 

while true; do 
    sleep 60 
    agent_pid=$(cat /var/run/stackdriver-agent.pid 2>/dev/null) 

    ps -p $agent_pid > /dev/null 2>&1 
    if [ $? != 0 ]; then 
     echo "Stackdriver agent pid not found!" 
     break; 
    fi 
done 

elasticsearch.conf:

https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/elasticsearch.conf

# This is the monitoring configuration for Elasticsearch 1.0.x and later. 
# Look for ELASTICSEARCH_HOST and ELASTICSEARCH_PORT to adjust your configuration file. 
LoadPlugin curl_json 
<Plugin "curl_json"> 
    # When using non-standard Elasticsearch configurations, replace the below with 
    #<URL "http://ELASTICSEARCH_HOST:ELASTICSEARCH_PORT/_nodes/_local/stats/"> 
    # PREVIOUSE LINE 
    # <URL "http://localhost:9200/_nodes/_local/stats/"> 
    <URL "http://elasticsearch:9200/_nodes/_local/stats/"> 
     Instance "elasticsearch" 
.... 

两者运行状态:

NAME          READY  STATUS RESTARTS AGE 
esclient-4231471109-bd4tb     1/1  Running 0   23h 
esclient-4231471109-k5pnw     1/1  Running 0   23h 
esdata-1-2524076994-898r0     1/1  Running 0   23h 
esdata-2-2426789420-zhz7j     1/1  Running 0   23h 
esmaster-1-4205943399-zj2pn    1/1  Running 0   23h 
esmaster-2-4248445829-pwq46    1/1  Running 0   23h 
esmaster-3-3967126695-w0tp2    1/1  Running 0   23h 
stackagent-3122989159-15vj1    1/1  Running 0   18h 

回答

0

与插件configuration.The HTTP API的URL的问题:// elasticsearch:9200/_nodes/** _local **/stats /“>将只返回信息_local这是一个没有文档的客户端节点。

另外,Stackdriver数据将在k8s群集节点下收集,而不是在pod名称下收集。

的部分解决方案是建立在跨斗的数据节点和相应的ES节点名称修补elasticsearch.conf查询:

  1. 得到curl [elasticsearch]:9200/_nodes/stats
  2. 由$找到ES节点名(hostname )
  3. 修补配置<URL "http://elasticsearch:9200/_nodes/<esnode_name>/stats/">

这将收集的数据K8S节点名称下ES的数据的节点的信息。