Go语言(二十)日志采集项目(二)Etcd的使用
时间:2022-07-25
本文章向大家介绍Go语言(二十)日志采集项目(二)Etcd的使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
日志采集项目(二)Etcd的使用
ETCD 介绍
- 概念: 高可用的分布式key-value存储,实现配置共享和服务发现
- 类似项目: zookeeper和consul
- 开发语言: Go
- 接口: 提供restful的http接口,使用简单
- 实现算法: 基于raft算法的强一致性,高可用的服务存储目录
ETCD的应用场景
- 服务发现和注册
- 配置中心
- 分布式锁
- master选举
ETCD环境搭建
- 下载地址:https://github.com/etcd-io/etcd/releases/download/v3.4.7/etcd-v3.4.7-linux-amd64.tar.gz
- 启动方式: bin/etcd 可以直接启动
[root@centos7-node1 etcd]# nohup ./etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380 & #启动etcd
- etcdctl使用
[root@centos7-node1 ~]# cd /opt/application/etcd/
[root@centos7-node1 etcd]# ./etcdctl --endpoints "http://localhost:2379" put /logagent/conf 333333
[root@centos7-node1 etcd]# ./etcdctl --endpoints "http://localhost:2379" watch /logagent/conf
[root@centos7-node1 etcd]# ./etcdctl --endpoints "http://localhost:2379" del /logagent/conf
- go实现watch功能
安装v3插件
go get go.etcd.io/etcd/clientv3
代码
package main
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"time"
)
func main() {
client,err := clientv3.New(clientv3.Config{
Endpoints: []string{"192.168.56.11:2379"},
DialTimeout: time.Second*3,
})
defer client.Close()
fmt.Printf("conn succn")
for {
resultChan := client.Watch(context.Background(),"/logagent/conf")
for v := range resultChan{
if v.Err() != nil {
fmt.Printf("watch faild,err:%vn",err)
continue
}
for _,e := range v.Events {
fmt.Printf("event_type:%v,key:%v,val:%vn",e.Type,e.Kv.Key,string(e.Kv.Value))
}
}
}
}
- go 实现put功能
package main
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"time"
)
func main() {
client,err := clientv3.New(clientv3.Config{
Endpoints: []string{"192.168.56.11:2379"},
DialTimeout: time.Second*3,
})
defer client.Close()
fmt.Printf("conn succn")
_,err = client.Put(context.Background(),"/logagent/conf","sddadas")
if err != nil {
fmt.Printf("Put faild,err:%vn",err)
}
}
- kafka消费代码
package main
import (
"fmt"
"github.com/Shopify/sarama"
"sync"
)
var wg sync.WaitGroup
func main() {
//连接配置
consumer,err := sarama.NewConsumer([]string{"192.168.56.11:9092"},nil)
if err != nil {
fmt.Printf("consumer mesage faild,error:%vn",err)
return
}
fmt.Printf("conn succn")
pt,err := consumer.Partitions("nginx_log")
if err != nil {
fmt.Printf("get partions aild,err:%vn",err)
return
}
for _,p := range pt {
pc, err := consumer.ConsumePartition("nginx_log",p,sarama.OffsetNewest)
if err != nil {
fmt.Printf("consumer faild,error:%vn",err)
continue
}
wg.Add(1)
go func() {
for m := range pc.Messages() {
fmt.Printf("topic:%v,value:%vn",m.Topic,string(m.Value))
}
wg.Done()
}()
}
wg.Wait()
}
- CentOS7下Elasticsearch集群部署记录
- Flash/Flex学习笔记(27):摄像头/麦克风的视频/音量指示器
- Flash/Flex学习笔记(26):AS3自定义右键菜单
- Python27中Json对中文的处理
- Python在VSCode中进入交互界面调试
- CentOS7下单机部署RabbltMQ环境的操作记录
- Flash/Flex学习笔记(24):粒子效果
- 针对业务日志的监控报警设置
- 对广晟有色的数据分析
- Flash/Flex学习笔记(22):滤镜学习
- Python输出信息
- Flash/Flex学习笔记(21):利用colorTransform改变对象的颜色及透明度
- 网站访问状态和超时时间监控报警设置
- 为treeview添加客户端事件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 客户端RSA加密的实现方法
- Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0)
- Android 中Failed to read key from keystore解决办法
- Android圆角按钮的制作方法
- Android计时器控件Chronometer应用实例
- Android 中利用 ksoap2 调用 WebService的示例代码
- Android自定义View展示Wifi信号强弱指示方法示例
- android事件分发机制的实现原理
- Android 在子线程中更新UI的几种方法示例
- WebView设置WebViewClient的方法
- Android星级评分条的实现代码
- Android模仿美团顶部的滑动菜单实例代码
- android实现按钮获取焦点延迟加载
- Devtools 老师傅养成[1] - Chrome Devtools介绍
- Android4.4开发之电池低电量告警提示原理与实现方法分析