[Grafana] Grafana에서 AWS의 예약 인스턴스(RI)를 모니터링해 보았다.

안녕하세요.
최근 개발에도 손을 내기 시작한 전 인프라의 jkkitakita.

우선
뭔가 쓰고 싶은 충동에 몰렸기 때문에
조금 전에, 놀이 감각으로 하고 있던 것을 괴로워.

소개



얼마든지 이하의 지식이 있으면 좋을지도.
  • 예약 인스턴스
  • 예약 인스턴스란 무엇입니까?
  • AWS Black Belt Online Seminar AWS 비용 절감 옵션

  • Grafana + Influxdb
  • telegraf의 Exec Input Plugin 정보

  • 다양한 서비스 버전


  • Telegraf - Version 0.10.3
  • InfluxDB shell 0.10.3
  • Grafana v 2.6.0

  • 배경


  • EC2, RDS, Redshift의 대수가 늘어나고, 비용이 상당히 든다.
  • Trusted Advisor를 보면, 현재의 최적화는 검토할 수 있지만, 다음 언제 리저브드를 구입하면 좋은지 파악하고 싶다. (cf. 회사 현금 흐름)
  • 현재의 온디맨드/리저브드 비율을 그래프로 한눈에 확인하고 싶다.

  • 특히 3.가 중대하다.
    「매월 1회, EC2의 화면을 보고, 하루에 걸쳐 확인한다」
    운영으로 커버는 우선 논외입니다.

    그 외, 열심히 하려고 하면
    - Cost Visualizer 도입
    htps : // v. smt. 아무도. 네. jp/? p=코몬_파게&p_나메=코 st_ゔぃ스아아제r
    - 엑셀 등으로 매일 편집

    어쨌든 이야기가되어, 그것은 그래서 비용과 노력이 든다.
    어쨌든, 이것도 나쁘다. 귀찮아. (웃음)

    멘도 쿠사나 - 멘도 쿠사이 -
    보소 보소 말하면서, 문득

    "이제 서버 동향 모니터링
    telegraf + influxdb + Grafana에서 할 수 있기 때문에
    RI도 거기에 넣어 대시보드로 버려! ! ! ! "

    그래서
    급히, telegraf + bash로 갈 수 있었기 때문에
    telegraf 설정 시작 (` · ω · ') 키리

    telegraf 설정해보기



    우선, conf에 input.exec를 추기.

    /etc/telegraf/telegraf.conf
    
    # EC2
    [[inputs.exec]]
      command = "/etc/telegraf/telegraf.d/exec/count-instances"
      data_format = "influx"
      interval = "3600s"
    
    [[inputs.exec]]
      command = "/etc/telegraf/telegraf.d/exec/reserved_instance.sh"
      data_format = "influx"
      interval = "3600s"
    
    # RDS
    [[inputs.exec]]
      command = "/etc/telegraf/telegraf.d/exec/rds_reserved_nodes.sh"
      data_format = "influx"
      interval = "3600s"
    
    # Redshift
    [[inputs.exec]]
      command = "/etc/telegraf/telegraf.d/exec/redshift_reserved_nodes.sh"
      data_format = "influx"
      interval = "3600s"
    

    그리고는, bash를 조금 쓸 뿐.

    ■ EC2
    1. 전체(온디맨드 및 예약) 수

    /etc/telegraf/telegraf.d/exec/count-instances.sh
    #!/bin/bash
    
    ### check instance status is running
    /usr/bin/aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" |
    jq -r  '[ .Reservations[] | .Instances[] | { InstanceType } ]| group_by(.InstanceType) | .
    []|.[0] + { "Count": length}| .InstanceType, .Count'|sed 'N;s/\n/ value=/'|sed 's/^/instan
    ces,instance_type=/'
    

    2. 예약 수

    /etc/telegraf/telegraf.d/exec/reserved_instance.sh
    #!/bin/bash
    
    /usr/bin/aws ec2 describe-reserved-instances --filters "Name=state,Values=active" | jq -r
    '.ReservedInstances[] | [.InstanceType, .AvailabilityZone, (.InstanceCount|tostring), .End
    ] | join(",")' | sed 's/T.*//g' | awk -F, '{print "reserved_instances,instance_type=" $1 "
    ,AvailabilityZone=" $2 ",end_date=" $4 " RI_count=" $3}' | sed 's/=,/=-,/g'
    

    ■ RDS
    · 전체 (온 디맨드 및 예약) 및 예약 수

    /etc/telegraf/telegraf.d/exec/rds_reserved_nodes.sh
    #!/bin/bash
    
    # count of rds db instaces group by instance_type
    /usr/bin/aws rds describe-db-instances --output json | jq -r '[.DBInstances[] | { DBInstan
    ceClass }] | group_by(.DBInstanceClass) | .[] | .[0] + { "Count": length } | [.DBInstanceC
    lass, (.Count|tostring)] | join(",")' | sed 's/^/rds_db_instances,db_instance_type=/g'| aw
    k -F, '{print $1 "," $2 " values=" $3}'
    
    # count of reserved rds db instances group by instance_type
    /usr/bin/aws rds describe-reserved-db-instances --output json | jq -r '.ReservedDBInstance
    s[] | select(.State == "active") | [.DBInstanceClass, (.DBInstanceCount|tostring), .StartT
    ime] | join(",")' | sed -E 's/^(.*T.*)\..*$/\1/g' | awk -F, '{print "rds_reserved_instance
    s,db_instance_type=" $1 ",start_time=" $3 " RI_count=" $2}'
    

    ■ Redshift(dc1.large 전용)
    · 전체 (온 디맨드 및 예약) 및 예약 수

    /etc/telegraf/telegraf.d/exec/redshift_reserved_nodes.sh
    #!/bin/bash
    
    # count of redshift nodes
    /usr/bin/aws redshift describe-clusters --output json | jq -r '[.Clusters[] | select(.Node
    Type == "dc1.large") | .NumberOfNodes] | add' | sed 's/^/redshift_cluster_nodes,node_type=
    dc1.large values=/g'
    
    # count of reserved redshift nodes
    /usr/bin/aws redshift describe-reserved-nodes --output json | jq -r '.ReservedNodes[] | se
    lect(.State == "active") | [.NodeType, (.NodeCount|tostring), .StartTime] | join(",")' | s
    ed -E 's/^(.*T.*)\..*$/\1/g' | awk -F, '{print "redshift_reserved_nodes,node_type=" $1 ",s
    tart_time=" $3 " RI_count=" $2}'
    

    jq, sed, awk로 원 라이너로 밀어. (웃음)

    더 좋은 느낌이 들겠지만
    아무튼 일단 현상, 이런 느낌으로 갈 수 있을 것 같다.

    telegraf 재시작.
    /etc/init.d/telegraf restart
    

    InfluxDB의 내용 확인해 본다.
    우선, 잘 가고 그렇게.
  • EC2




  • RDS




  • Redshift





  • Grafana로 대시보드 만들기



    1. 각종 서비스의 예약 종료일을 일람으로 파악


    2. 각종 서비스의 예약수의 경향 모니터링(EC2는 인스턴스 타입마다) - 온디맨드 - 예약


    오, 오. . . 엄청 비용 절감할 수 있을 것 같다. . .
    우선, 나의 급료분의 몇배는. . . 웃음

    사이고에게



    역시, 뭔가 있으면 Grafana가 제일. 웃음
    특히 모니터링하려면.

    게다가
    Kapatitor 라든지 사용하면
    AWS 서비스나 다른 SaaS로는 불가능
    상세한 비용 감시도 실현 가능할 것 같기 때문에
    본격적으로 운용하는 기분이 되면 해 보자고 생각합니다!

    좋은 웹페이지 즐겨찾기