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. PHP highlight_string() 函数

    实例 对字符串进行 PHP 语法高亮显示: <html><body><?phphighlight_string("Hello world! <?php p ...

  2. PDOStatement::setFetchMode

    PDOStatement::setFetchMode — 为语句设置默认的获取模式.(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0)高佣联盟 www.cgewang. ...

  3. idea修改module name后重启失效

    技术交流群 : 816227112 idea每次修改module name后重启,module还是会在后面加上原来的name. 这时修改: .idea下的modules.xml 内的module名即可 ...

  4. NCoreCoder.Aop 国庆更新

    原本的IAopActors如下 public interface IAopActors { object Execute(AopContext context); Task<TResult> ...

  5. Nginx的基本使用和配置

    2.1什么是Nginx Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师伊戈尔·西索夫(Igor Sysoev)所开发,官方 ...

  6. ios 淘宝评论详情、朋友圈布局masony实现

    最近做项目,用到了类似于淘宝的朋友圈的功能,然后自己抽出了一个小demo,与大家分享 介绍:用的是masony布局的cell这样的话,文本,以及图片可以自适应,不用人工再去计算高度,很方便. 注:该d ...

  7. Pytorch_第七篇_深度学习 (DeepLearning) 基础 [3]---梯度下降

    深度学习 (DeepLearning) 基础 [3]---梯度下降法 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数" ...

  8. 《Spanner: Google’s Globally-Distributed Database》论文总结

    Spanner 总结 说明:本文为论文 <Spanner: Google's Globally-Distributed Database> 的个人理解,难免有理解不到位之处,欢迎交流与指正 ...

  9. 简化RESTful开发,Spring Data REST让你少掉发

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 前言 Springboot + Spring MVC大大简化了Web应用的RESTful开发,而Spring Data RE ...

  10. 商业分析-04行为&业务相关数据指标

    [访问深度]用户对产品的了解程度 [弹出率] 弹出率是基于访问回话的 而不是基于页面的,上图中1 4 6 是属于弹出