Go에서 gRPC를 사용하여 IOS XR에서 Telemtry 수집
그럼에도 엘라스틱 검색, 인플렉스 DB 등 성숙한 제품이 있는 데이터 매장에 비하면 텔레미터의 콜렉터가 발전하는 것도 사실이다.
파이썬 기법 사용하기 예전에 인터넷 프로그램 학습회에서 소개한 적이 있기 때문에 이번에는 Go를 이용해 시스코의 IOS XR에서 Dial out을 통해 모델 드라이브 인 텔레미터를 얻는 방법을 소개한다.pipeline 고로 쓴 콜렉터 자체는 맞지만 가지와 잎이 많아 읽기가 어렵다)
또한 오류 처리 등은 완전히 생략됐으니 필요에 따라 추가해 주십시오.
IOS XR을 손쉽게 시도하려면AWS로 XRv9000을 설정하는 경우 좋습니다.
Telemetry 에 다음 config 를 투입합니다.
telemetry model-driven
destination-group gollector
address-family ipv4 192.168.1.100 port 2103
encoding self-describing-gpb
protocol grpc no-tls
!
!
sensor-group Perf
sensor-path Cisco-IOS-XR-wdsysmon-fd-oper:system-monitoring/cpu-utilization
!
subscription PerfStats
sensor-group-id Perf sample-interval 5000
destination-id gollector
source-interface MgmtEth0/RP0/CPU0/0
!
!
XRv에서 서버(192.168.100)의port2103으로 CPU 사용률 정보를 보내는 설정.시도이기 때문에 TLS를 사용하지 않고 전송은 gRPC를 사용하며 데이터 형식은 GPB를 사용합니다.서버는 모든 것이 가능합니다. 이번에는 CentOS 8입니다.쓰다SELinux 및 Firewalld 설정을 미리 변경합니다.
setenforce 0
systemctl stop firewalld
Go를 설치하고 경로를 통과합니다.wget http://golang.org/dl/go1.15.2.linux-amd64.tar.gz
tar -C /usr/local -zxf go1.15.2.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
목적에 부합되는 Go용 문서군은 이미 참조준비 다 됐습니다., 이번 참조Dial out용 파일.이 파일에서serverapi의 정의는 다음과 같습니다type GRPCMdtDialoutServer interface {
MdtDialout(GRPCMdtDialout_MdtDialoutServer) error
}
MdtDialout
는 실현 가능한 방법을 알고 있다.아래의 느낌.package main
import (
dialout "github.com/cisco/bigmuddy-network-telemetry-proto/proto_go/mdt_grpc_dialout"
)
type server struct{}
func (s *server) MdtDialout(stream dialout.GRPCMdtDialout_MdtDialoutServer) error {
//ここに受け取ったデータに対する処理を書く
}
이어서 gRPC의 서버를 만듭니다.package main
import (
"net"
"google.golang.org/grpc"
dialout "github.com/cisco/bigmuddy-network-telemetry-proto/proto_go/mdt_grpc_dialout"
)
type server struct{}
func (s *server) MdtDialout(stream dialout.GRPCMdtDialout_MdtDialoutServer) error {
//ここに受け取ったデータに対する処理を書く
}
func main() {
listen, _ := net.Listen("tcp", "0.0.0.0:2103")
s := grpc.NewServer()
dialout.RegisterGRPCMdtDialoutServer(s, &server{})
s.Serve(listen)
}
모델 드라이브 텔레미터는 이 파일에 기술된 형식으로 발송됩니다.(Dial out에서 받은 반환 값의 MdtDialoutArgs에 포함된 데이터 []byte는 이 형식임)그래서 저는 그 정의에 따라 Unmarchal을 진행할 것입니다.또한self-describing gpb의 경우 텔레메트리 데이터는 DataGpbkv에 저장된다.이를 감안하면 다음과 같이 데이터를 얻을 수 있다(대량의 데이터가 발송될 수 있음을 주의한다).
package main
import (
"fmt"
"net"
"google.golang.org/grpc"
"github.com/golang/protobuf/proto"
telem "github.com/cisco/bigmuddy-network-telemetry-proto/proto_go"
dialout "github.com/cisco/bigmuddy-network-telemetry-proto/proto_go/mdt_grpc_dialout"
)
type server struct{}
func (s *server) MdtDialout(stream dialout.GRPCMdtDialout_MdtDialoutServer) error {
for {
msg, _ := stream.Recv()
telem := &telem.Telemetry()
err := proto.Unmarshal(msg.Data, telem)
if telem.DataGpbkv != nil {
fmt.Println(telem.DataGpbkv)
}
}
}
func main() {
listen, _ := net.Listen("tcp", "0.0.0.0:2103")
s := grpc.NewServer()
dialout.RegisterGRPCMdtDialoutServer(s, &server{})
s.Serve(listen)
}
여기서 주의해야 할 것은 google.golang.org/protobuf/proto
가 아니라 반드시 사용해야 한다는 것이다github.com/golang/protobuf/proto
.편집기의 보완은 때때로 전자가 될 수 있기 때문에 후자를 명확하게 지정해야 한다.그리고
telem.DataGpbkv
를 좋은 느낌으로 씻어 데이터 메모리에 넣는다. (이곳은sensor path에 따라 다른 처리가 필요하기 때문에 생략한다).참고로, gRPC 서버와 연결할 때 XRv 측은 다음과 같은 상태를 확인할 수 있습니다.
RP/0/RP0/CPU0:xrv#show telemetry model-driven subscription PerfStats
Sun Sep 20 00:17:49.074 JST
Subscription: PerfStats
-------------
State: ACTIVE
Source Interface: MgmtEth0_RP0_CPU0_0(Up 0x60000000)
Sensor groups:
Id: Perf
Sample Interval: 5000 ms
Sensor Path: Cisco-IOS-XR-wdsysmon-fd-oper:system-monitoring/cpu-utilization
Sensor Path State: Resolved
Destination Groups:
Group Id: gollector
Destination IP: 192.168.1.100
Destination Port: 2103
Encoding: self-describing-gpb
Transport: grpc
State: Active
No TLS
Total bytes sent: 0
Total packets sent: 0
Collection Groups:
------------------
Id: 1
Sample Interval: 5000 ms
Encoding: self-describing-gpb
Num of collection: 0
Collection time: Min: 0 ms Max: 0 ms
Total time: Min: 0 ms Avg: 0 ms Max: 0 ms
Total Deferred: 0
Total Send Errors: 0
Total Send Drops: 0
Total Other Errors: 0
No data Instances: 0
Last Collection Start:2020-09-20 00:17:49.516345779 +0900
Last Collection End: 2020-09-20 00:17:44.511967965 +0900
Sensor Path: Cisco-IOS-XR-wdsysmon-fd-oper:system-monitoring/cpu-utilization
이상
Reference
이 문제에 관하여(Go에서 gRPC를 사용하여 IOS XR에서 Telemtry 수집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ikegami/articles/5608f472cecc1f286490텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)