2021/12/5 老男孩带你21周Go语言 (十二)

P170 内容回顾

在这里插入图片描述

P171 今日内容

在这里插入图片描述

P172 ES介绍

logtranfer相当于把日志从kafka搬到es里。
GitHub的检索其实就是用的es

在这里插入图片描述
在这里插入图片描述
type是索引的逻辑类别/分区,语义是以使用者来变。

在这里插入图片描述
在这里插入图片描述
es和mysql的概念对比:
es的index相当于mysql的database。
type对应 表的概念。
document相当于数据行 的意思。
field对应数据字典
mapping对应mysql的schem

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动,默认是在9200端口
在这里插入图片描述

在这里插入图片描述

P173 ES搭建及常见API示例

es 的使用都是走restful api的

在这里插入图片描述
在这里插入图片描述
索引可以对应传统数据库的database

在这里插入图片描述
创建一个索引www,index就是数据库

在这里插入图片描述
在这里插入图片描述
user是个数据库,person就是类型
在这里插入图片描述
在这里插入图片描述
index是student,type是类型

在这里插入图片描述
在这里插入图片描述
传一下数据进去

在这里插入图片描述
进行一个检索,从student库里进行一个search
在这里插入图片描述

在这里插入图片描述
查询相关

在这里插入图片描述
在这里插入图片描述

require (
    github.com/olivere/elastic/v7 v7.0.4
)
package main

import (
	"context"
	"fmt"

	"github.com/olivere/elastic/v7"
)

// Elasticsearch demo

type Person struct {
	Name    string `json:"name"`
	Age     int    `json:"age"`
	Married bool   `json:"married"`
}

func main() {
	client, err := elastic.NewClient(elastic.SetURL("http://192.168.1.7:9200"))
	if err != nil {
		// Handle error
		panic(err)
	}

	fmt.Println("connect to es success")
	p1 := Person{Name: "rion", Age: 22, Married: false}
	put1, err := client.Index().
		Index("user").
		BodyJson(p1).
		Do(context.Background())
	if err != nil {
		// Handle error
		panic(err)
	}
	fmt.Printf("Indexed user %s to index %s, type %s\n", put1.Id, put1.Index, put1.Type)
}

在这里插入图片描述
可以指定查询的size
在这里插入图片描述

P174 go操作ES

在这里插入图片描述

package main

import (
	"context"
	"fmt"

	"github.com/olivere/elastic/v7"
)

// Elasticsearch demo

type Person struct {
	Name    string `json:"name"`
	Age     int    `json:"age"`
	Married bool   `json:"married"`
}

func main() {
	client, err := elastic.NewClient(elastic.SetURL("http://192.168.1.7:9200"))
	if err != nil {
		// Handle error
		panic(err)
	}

	fmt.Println("connect to es success")
	p1 := Person{Name: "rion", Age: 22, Married: false}
	put1, err := client.Index().
		Index("user").
		BodyJson(p1).
		Do(context.Background())
	if err != nil {
		// Handle error
		panic(err)
	}
	fmt.Printf("Indexed user %s to index %s, type %s\n", put1.Id, put1.Index, put1.Type)
}

下载安装依赖
在这里插入图片描述
相当于构造一个 新的es客户端

在这里插入图片描述
第一步是初始化连接
在这里插入图片描述
调用方法

在这里插入图片描述

在这里插入图片描述
看之前的操作示例里的链式操作
在这里插入图片描述
在这里插入图片描述
创建的时候初始化一个连接,对应到索引里

在这里插入图片描述

P175 kafka消费示例

拿到一个分区,尝试去每一个分区里消费数据

在这里插入图片描述
连接kafka消费消息

package main

import (
	"fmt"

	"github.com/Shopify/sarama"
)

// kafka consumer

func main() {
	consumer, err := sarama.NewConsumer([]string{"127.0.0.1:9092"}, nil)
	if err != nil {
		fmt.Printf("fail to start consumer, err:%v\n", err)
		return
	}
	partitionList, err := consumer.Partitions("web_log") // 根据topic取到所有的分区
	if err != nil {
		fmt.Printf("fail to get list of partition:err%v\n", err)
		return
	}
	fmt.Println(partitionList)
	for partition := range partitionList { // 遍历所有的分区
		// 针对每个分区创建一个对应的分区消费者
		pc, err := consumer.ConsumePartition("web_log", int32(partition), sarama.OffsetNewest)
		if err != nil {
			fmt.Printf("failed to start consumer for partition %d,err:%v\n", partition, err)
			return
		}
		defer pc.AsyncClose()
		// 异步从每个分区消费信息
		go func(sarama.PartitionConsumer) {
			for msg := range pc.Messages() {
				fmt.Printf("Partition:%d Offset:%d Key:%v Value:%v", msg.Partition, msg.Offset, msg.Key, msg.Value)
			}
		}(pc)
	}
}

在这里插入图片描述
在这里插入图片描述
先启动一个zookeeper,2181端口

在这里插入图片描述
启动一个kafka
在这里插入图片描述

在这里插入图片描述
或者sarama需要改成1.19

在这里插入图片描述
修改go mod里的require,下面tidy是校验,查看缓存代码里的版本和gomod的一致不一致
在这里插入图片描述
在这里插入图片描述
启动etcd
在这里插入图片描述
key是ip

在这里插入图片描述
在这里插入图片描述之前的etcdput,往etcd里设置值
在这里插入图片描述
现在就等文件里写日志了

在这里插入图片描述
写一些信息到日志文件里

在这里插入图片描述
logagent就收集到了

在这里插入图片描述
消费者没收到消息因为没往下走

在这里插入图片描述

在这里插入图片描述
kafka消费者,最后加–from-beginning
在这里插入图片描述

现在就拿到数据了
在这里插入图片描述
在这里插入图片描述
字节类型才能用string接收
在这里插入图片描述
现在是用go写消费者,从kafka里把数据读出来展示出来

P176 Kibana搭建及使用

在这里插入图片描述
kibana集成了es的搜索和展示

在这里插入图片描述
下载好后,修改配置文件,下载的版本 需要跟ES一致
在这里插入图片描述
启动kibana
在这里插入图片描述
创建索引

在这里插入图片描述创建索引
在这里插入图片描述
在这里插入图片描述
现在就能收到日志了
在这里插入图片描述
在这里插入图片描述

P177 logtransfer实现

1.将日志从kafka取出来发往es上
0.加载配置文件
1.初始化
1.从kafka取日志数据
2.发往es

在这里插入图片描述
写配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在值是空的
在这里插入图片描述
现在要设置声明,不然在配置文件里找不到kafkacfg开头的,得到的就是空
在这里插入图片描述
现在就可以获得值了
在这里插入图片描述
new反应对应类型的指针
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
1。在一个函数中修改变量一定要传指针。
2.在配置文件对应的结构体中一定要设置tag特别是嵌套的结构体

在这里插入图片描述
加载完配置后,就是初始化kafka
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在main函数里调用初始化函数
在这里插入图片描述

在这里插入图片描述
后台的goroutine一直消费数据发送给es
在这里插入图片描述
初始化es,准备接收kafka过来的消息
在这里插入图片描述

还有发送数据到es的操作,所以需要写一个send方法,client提出去,作为一个全局 的
在这里插入图片描述
写一个sendtoes方法
在这里插入图片描述

造一个结构体,把数据传到es里
在这里插入图片描述
在这里插入图片描述
unMarshall。使用方法,前面数据,后面是接收变量的指针
在这里插入图片描述
json导入未encoding/json

在这里插入图片描述

1.先初始化es,创建一个连接的client,再初始化kafka,
2.连接kafka,创建分区消费者,
3.每个分区的消费者分别取出数据,通过sendtoes,将数据发往es。

在这里插入图片描述
先启动logagent

在这里插入图片描述
在这里插入图片描述
现在去kibana查数据
在这里插入图片描述
在这里插入图片描述
安装一个中文分词器IK
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
初始化es的时候只要创建一个client,提供一个对外往es写数据的函数
在这里插入图片描述
根据分区创建消费者,Kafka可能会把topic放到不同分区,有一个分区就去消费一个。
每个分区创建一个消费者,通过sendtos发送数据至es

在这里插入图片描述
重启es
在这里插入图片描述
启动logtransfer

在这里插入图片描述

P178 logstransfer优化

这里是函数调用函数,可以进行优化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把topic也放进去
在这里插入图片描述
chansize先写死成100000
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这里是往channel里去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在init调用前初始化
在这里插入图片描述
传一个topic
在这里插入图片描述
bodyJSon这个地方必须要能被json格式化的一个go里的结构体类型

在这里插入图片描述
在这里插入图片描述
这样就能收到日志了
在这里插入图片描述
把chansize也提到配置文件里

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
main函数里通过cfg.EScfg.chansize读到配置
在这里插入图片描述
也可以用多个goroutine写
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样就开了16个goroutine去写
在这里插入图片描述

P179 prometheus和grafana介绍

windows下没有indoes
在这里插入图片描述
CPU
采集CPU相关信息。

import "github.com/shirou/gopsutil/cpu"

// cpu info
func getCpuInfo() {
	cpuInfos, err := cpu.Info()
	if err != nil {
		fmt.Printf("get cpu info failed, err:%v", err)
	}
	for _, ci := range cpuInfos {
		fmt.Println(ci)
	}
	// CPU使用率
	for {
		percent, _ := cpu.Percent(time.Second, false)
		fmt.Printf("cpu percent:%v\n", percent)
	}
}

获取CPU负载信息:


import "github.com/shirou/gopsutil/load"

func getCpuLoad() {
	info, _ := load.Avg()
	fmt.Printf("%v\n", info)
}

在这里插入图片描述
在这里插入图片描述
influxdb只有商业的可以做集群

在这里插入图片描述
short-lived-jobs短时服务,找到一个统一的网关pushgateway,prometheus去gateway里拉数据

在这里插入图片描述
在这里插入图片描述
先启动prometheus
![](https://img-blog.csdnimg.cn/5d6c8a04cd1e40098ef958064a78d719.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANDhONkU=,size_19,color_FFFFFF,t_70,g_se,x_16)
监控开启了多少个goroutine开启

在这里插入图片描述
启动grafana

在这里插入图片描述
配置数据源

在这里插入图片描述alertmanager是管理告警的

a'l

在这里插入图片描述

P180 项目总结

在这里插入图片描述

P181 gin的介绍

在这里插入图片描述
自动下载到go的src下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值