Elasticsearch使用

详细使用请看我写的Go操作Elasticsearch专篇

https://www.cnblogs.com/you-men/p/13391265.html

example1

package main

import (
"context"
"fmt"
"github.com/olivere/elastic/v7"
) var eshost = "http://192.168.43.176:9200"
var client *elastic.Client type Tyweet struct {
User string
Message string
} //创建
func main() {
var err error
client, err = elastic.NewClient(elastic.SetSniff(false), elastic.SetURL(eshost))
if err !=nil{
fmt.Println("connect es error",err)
} //使用结构体
tweet := Tyweet{User: "youmen",Message: "Take Five"}
_,err = client.Index().
Index("user").
Type("tweet").
Id("1").
BodyJson(tweet).
Do(context.Background())
if err != nil{
// Handle error
panic(err)
return
}
fmt.Println("Insert index success")
}

example2

package main

import (
"context"
"fmt"
"github.com/olivere/elastic/v7"
) var client *elastic.Client var host = "http://192.168.43.176:9200" type Employee struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Age int `json:"age"`
About string `json:"about"`
Interests []string `json:"interests"`
} //初始化
func init() {
//errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
var err error
//这个地方有个小坑 不加上elastic.SetSniff(false) 会连接不上
client, err = elastic.NewClient(elastic.SetSniff(false), elastic.SetURL(host))
if err != nil {
panic(err)
}
_,_,err = client.Ping(host).Do(context.Background())
if err != nil {
panic(err)
}
//fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number) _,err = client.ElasticsearchVersion(host)
if err != nil {
panic(err)
}
//fmt.Printf("Elasticsearch version %s\n", esversion)
} //创建
func create() { //使用结构体
e1 := Employee{"Jane", "Smith", 32, "I like to collect rock albums", []string{"music"}}
put1, err := client.Index().
Index("megacorp").
Type("employee").
Id("1").
BodyJson(e1).
Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("Indexed tweet %s to index s%s, type %s\n", put1.Id, put1.Index, put1.Type) //使用字符串
e2 := `{"first_name":"John","last_name":"Smith","age":25,"about":"I love to go rock climbing","interests":["sports","music"]}`
put2, err := client.Index().
Index("megacorp").
Type("employee").
Id("2").
BodyJson(e2).
Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("Indexed tweet %s to index s%s, type %s\n", put2.Id, put2.Index, put2.Type) e3 := `{"first_name":"Douglas","last_name":"Fir","age":35,"about":"I like to build cabinets","interests":["forestry"]}`
put3, err := client.Index().
Index("megacorp").
Type("employee").
Id("3").
BodyJson(e3).
Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("Indexed tweet %s to index s%s, type %s\n", put3.Id, put3.Index, put3.Type)
} func main() {
create()
}

kafka消费消息发送ES

kafka消费消息
package Initial

import (
"github.com/Shopify/sarama"
"github.com/astaxie/beego/logs"
"time"
) func Run() (err error) {
partitionList, err := kafkaClient.client.Partitions(kafkaClient.topic)
if err != nil {
logs.Error("Failed to get the list of partitions: ", err)
return
}
for partition := range partitionList {
pc, errRet := kafkaClient.client.ConsumePartition(kafkaClient.topic, int32(partition), sarama.OffsetNewest)
if errRet != nil {
err = errRet
logs.Error("Failed to start consumer for partition %d: %s\n", partition, err)
return
}
defer pc.AsyncClose()
go func(pc sarama.PartitionConsumer) {
kafkaClient.wg.Add(1)
for msg := range pc.Messages() {
logs.Debug("Partition:%d, Offset:%d, Key:%s, Value:%s", msg.Partition, msg.Offset, string(msg.Key), string(msg.Value)) // 发送日志到es
err = sendToES(kafkaClient.topic,msg.Value)
if err != nil{
logs.Warn("send to es failed, err:%v",err)
}
}
kafkaClient.wg.Done()
}(pc)
}
kafkaClient.wg.Wait()
time.Sleep(time.Hour)
return
}
发送到es
package Initial

import (
"context"
"fmt"
"github.com/olivere/elastic/v7"
) var esclient *elastic.Client type LogMessage struct {
App string
Topic string
Message string
} type Tyweet struct {
User string
Message string
} //创建
func InitEs(addr string) (err error) {
esclient, err = elastic.NewClient(elastic.SetSniff(false), elastic.SetURL(addr))
if err != nil {
fmt.Println("connect es error", err)
}
return
} func sendToES(topic string, data []byte) (err error) {
msg := &LogMessage{}
msg.Topic = topic
msg.Message = string(data) _, err = esclient.Index().
Index(topic).
Type(topic).
//Id(fmt.Sprintf("%d", i)).
BodyJson(msg).
Do(context.Background())
if err != nil {
// Handle error
panic(err)
return
}
return
}
验证数据是否kafka消息被消费并发送到es

03 . Go开发一个日志平台之Elasticsearch使用及kafka消费消息发送到Elasticsearch的更多相关文章

  1. 开源一个Java Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了

    开源一个Java Class实现Openfire登陆.推出.消息发送 N年前写的,希望对Openfire开发新手有帮助哦 import java.util.*; import java.io.*;   ...

  2. 02 . Go开发一个日志收集平台之Context及etcd简单使用

    Context简单使用 context设置,获取value值 应用于全局通用参数传递 package main import ( "context" "fmt" ...

  3. 使用Symfony 2在三小时内开发一个寻人平台

    简介 Symfony2是一个基于PHP语言的Web开发框架,有着开发速度快.性能高等特点.但Symfony2的学习曲线也比 较陡峭,没有经验的初学者往往需要一些练习才能掌握其特性. 本文通过一个快速开 ...

  4. 开源一个C# Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. 学习ELK日志平台(二)

      一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索 ...

  6. 2.RABBITMQ 入门 - WINDOWS - 生产和消费消息 一个完整案例

    关于安装和配置,见上一篇 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置 公司有需求,要求使用winform开发这个东西(消息中间件),另外还要求开发一个日志中间件,但是也是要求 ...

  7. logstash+elasticsearch+kibana快速搭建日志平台

    使用logstash+elasticsearch+kibana快速搭建日志平台   日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日 ...

  8. Poseidon 系统是一个日志搜索平台——认证看链接ppt,本质是索引的倒排列表和原始日志数据都存在HDFS,而文档和倒排的元数据都在NOSQL里,同时针对单个filed都使用了独立索引,使用MR来索引和搜索

    Poseidon 系统是一个日志搜索平台,可以在百万亿条.100PB 大小的日志数据中快速分析和检索.360 公司是一个安全公司,在追踪 APT(高级持续威胁)事件,经常需要在海量的历史日志数据中检索 ...

  9. 通过ELK快速搭建一个你可能需要的集中化日志平台

    在项目初期的时候,大家都是赶着上线,一般来说对日志没有过多的考虑,当然日志量也不大,所以用log4net就够了,随着应用的越来越多,日志散 落在各个服务器的logs文件夹下,确实有点不大方便,这个时候 ...

随机推荐

  1. qemu 如何退出qemu

    如何退出qemu ctrl + a 放开后,再按下x 这里字母是小写!(不要按着大写键)

  2. 5073 [Lydsy1710月赛]小A的咒语

    LINK:[Lydsy1710月赛]小A的咒语 每次给定两个串 要求从a串中选出x段拼成B串 能否做到.T组数据. \(n\leq 100000,m\leq 100000,T\leq 10,x\leq ...

  3. idea中运行Tomcat后控制台出现乱码(统一设置成UTF-8)

    出现问题:运行Tomcat后控制台出现乱码,输出语句乱码(idea 2019.3版本) 解决方法: 方案1:File----->Settings..----->Editor-----> ...

  4. .net core MongoDB 初试

    是这样的,我们有一个场景,另一个服务器是写到MongoDB里面,我们的MVC页面要展示,需要分页展示 自己写了一个DAL public class MongoConnect { public stri ...

  5. python IF while逻辑判断语句

    if判断语句 if 1==1 and 2==2: pass else: print('error') if 1==1 or 2==2: pass else: print('error') while循 ...

  6. Android布局——单复选框(今天上课的内容总结下)

    怎么感觉最近补充的都是监听器的内容,今天学长提了一个新的监听器,看起来很牛批(因为很长) // 添加文本更改的监听器, TextWatcher是监听器的回调接口 text.addTextChanged ...

  7. 如何打印完整的MYSQL带参数SQL日志信息

    在mysql的jdbc中开启sql分析,如下: jdbc.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=U ...

  8. Python爬取招聘网站数据,给学习、求职一点参考

    1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大.因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于 ...

  9. SpringBoot2.x集成Redis (StringTemplate与redisTemplate的用法)

    1. Redis介绍Redis数据库是一个完全开源免费的高性能Key-Value数据库.它支持存储的value类型有五种,包括string(字符串).list(链表).set(集合).zset(sor ...

  10. Unity 笔记

    摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...