ELK
Kibana LogStash
下载
elasticsearch下载 kibana下载 logstash下载 分词器下载 pinyin下载
ES使用
控制面板 搜索 dev_tools
或开发工具
分词器 pinyin
添加ik分词器
https://www.elastic.co/guide/cn/elasticsearch/guide/current/configuring-analyzers.html
下载解压在 elasticsearch/plugins/ik
若版本不对则修改分词器的plugin-descriptor.properties中的elasticsearch.version=7.12.0
没安装分词器
安装ik分词器
自定义分词器
新建 diy.dic ==> 我就是我
修改 IKAnalyzer.cfg.xml ==> <entry key="ext_dict">diy.dic</entry>
pinyin安装
解压到es目录下的plugins下analysis-pinyin中即可,配置下plugin-descriptor.properties
的elasticsearch.version
版本
ES与关系型数据库对应关系表
索引
索引index类似于MySQL 数据库的表,用来存储一系列具有相同数据结构的文档,其中mapping表示文档的存储结构,相当于MySQL中的表结构
#创建索引 ES中创建索引使用的是 PUT 请求
PUT /my_index
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "my_index"
}
#查询 ES 实例中现有的所有索引
GET _cat/indices
#查询新创建的索引
GET my_index
{
"my_index" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1",
"provided_name" : "my_index",
"creation_date" : "1618446846344",
"number_of_replicas" : "1",
"uuid" : "-Wuw_ZYdTHmh67ugExGsJw",
"version" : {
"created" : "7120099"
}
}
}
}
}
#删除索引
DELETE my_index
{
"acknowledged" : true
}
文档
文档document是ES记录数据的基本工具,本质是一个json对象,就相当于关系型数据库MySQL中的一行数据,和MySQL的每行数据一样,每个文档都有一个唯一id表示
#创建文档
指定 ID 创建文档,使用 PUT
PUT my_index/doc/1
{
"username": "es",
"password": 123
}
不指定 ID ,使用 POST
POST /my_index/doc
{
"username": "es2",
"password": 12
}
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档id |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
查询模式
# 添加两条文档
PUT my_index/doc/1
{
"username": "es",
"password": 123
}
PUT my_index/doc/2
{
"username": "es elk",
"password": 123
}
# 泛查询: 不指明字段,在所有字段中匹配
# 查询任意字段中包含 es 的所有文档
GET my_index/_search?q=es
# 指定字段查询: 查询 username 为 es 的文档
# 查询 username 中包含 es 的所有文档
GET my_index/_search?q=username:es
# term: 一个个的单词, 匹配任意即可。比如 New York,匹配到 New 或者 York 都可以查询成功
# 查询 username 中含有 es 或者 elk 的所有文档
GET my_index/_search?q=username:es elk
# phrase: 词语查询,要用双引号包含,“elk”, 比如精确匹配到 “elk” 才可以
GET my_index/_search?q=username:"elk"
布尔操作符与分组查询
URISearch 中使用括号和布尔操作符进行条件分组查询,ES 中的布尔查询操作符如下:
AND (&&), OR(||), NOT(!), +(must), -(must_not)
括号可以用来区分查询的优先级和范围。
AND OR NOT 必须大写
在 URI Search 中 + 会被解析为空格,所以需要使用 encode 后的结果: %2B
# username 中可以包含 es ,必须包含 elk
GET my_index/_search?q=username:(es +elk)
即 GET my_index/_search?q=username:(es %2Belk)
# username 中包含 es, 但必须不能包含 elk
GET my_index/_search?q=username:(es -elk)
# username 中同时包含 es 和 elk
GET my_index/_search?q=username:(es AND elk)
# 括号用于限定,表示 username 中包含 es 或者 elk 的字段
# 如果不加括号就成了 username 中包含 es 或者其他所有字段中包含 elk 的字段的
GET my_index/_search?q=username:(es OR elk)
范围查询
# ES 提供了对数字和日志的范围区间查询
#区间写法 闭区间用 [] 开区间 {}
age:[1 TO 10] => 1<=age<=10
age:[1 TO 10} => 1<=age<10
age:[1 TO] => age>=1
age:[* TO 10] => age<=10
#算术符号写法
age:>=1
age:(>=1 && <=10)
#给文档添加字段
PUT /my_index/_mapping
{
"properties": {
"age": {
"type": "integer"
}
}
}
type字段类型可如下
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html
案例
GET my_index/_search?q=username:(es) AND age:>5
GET my_index/_search?q=age:[1 TO 10]
通配符与正则表达式
? 代表一个字符 * 代表0个或多个
username:e?k
username:e*
GET my_index/_search?q=username:e?k
GET my_index/_search?q=username:e*
GET my_index/_search?q=username:/[N]?e.*/
如果熟悉正则表达式的话那么将会非常方便,但是也要注意通配符匹配和正则匹配效率较低,会占用更多的内存,因此不建议使用。 并且没有特殊需求的话千万不要将 * ? 等通配符写在最前面,不然会导致查询所有的文档,极大的影响性能
模糊与近似度查询
常用的查询选项
通过查询结果我们可以知道 match 的查询匹配条件相当于 or。即任意一个单词匹配上即可,我们可以通过 operator 指明其为 and 查询,必须匹配所有的单词才可以 match(全文检索) match_phrase(短语搜索)
# username 字段会 先被拆除,后建立倒排索引
GET my_index/_search
{
"query":{
"match":{ # 指定查询类型为 match
# 查询 username 中有 es 和 elk 的文档
"username": {
"query": "es elk"
"operator": "and"
}
}
}
}
# 控制的最小单词匹配数
GET my_index/_search
{
"query": {
"match": {
"username": {
"query": "es elk",
# 虽然是 or, 但是我们要求最小匹配数为 2,必须匹配到 es 和 elk 才可以成功,达到了 and 的效果。
"minimum_should_match": 2
}
}
}
}
# match_phrase 是另一种全文检索模式(短语搜索),与 match 模式不同的是:
# match_phrase对字段作检索,有顺序要求
# phrase search 要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配
# 允许有差异,可以通过 slop 指定
GET my_index/_search
{
"query": {
"match_phrase": {
# match_phrase 对单词顺序有要求,下面的条件将无法查询到结果,使用 match 可以
"username": {
"query": "elk es"
}
}
}
}
# 可以通过 slop 字段指明差异度,指明为2 表示可以有两处差异,下面的语句可以查询出上面创建的文档
GET my_index/_search
{
"query": {
"match_phrase": {
# match_phrase 对单词顺序有要求,下面的条件将无法查询到结果,使用 match 可以
"username": {
"query": "elk es",
"slop": 2
}
}
}
}
GET my_index/_search
{
"profile": true,
"query": {
"query_string": {
# 指明查询字段,查询 username 和 password 字段中含有 alfred 或者 java 和 ruby 的文档
"fields": ["username", "password"],
"query": "es OR 123"
}
}
}
# 高亮查询
GET my_index/_search
{
"query": {
"match": {
"username":"es2"
}
},
"highlight": {
"fields": {
"username":{}
}
}
}
LogStash使用
任意目录创建一个conf后缀的文件
bin目录执行
logstash -f E:\_Environmental\es\logstash-7.12.0\config\log_elk.conf
监控文件 如下
input {
file {
path => "E:/_Environmental/es/1.log"
#设置多长时间扫描目录,发现新文件
discover_interval => 1
#设置多长时间检测文件是否修改
stat_interval => 10
sincedb_write_interval => 1
start_position => "beginning"
#设置新事件的标志
delimiter => "\n"
}
}
filter {
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "test-file"
}
}
监控端口 如下
input{
tcp {
mode => "server"
host => "127.0.0.1" #我这里是本地
port => "9999" #开放这个端口进行采集
codec => json_lines # 编解码器 有的版本需要肚子安装
}
}
output{
elasticsearch{ #es地址
hosts=>["127.0.0.1:9200"]
# 在es里产生的index的名称
index => "test-tcp"
}
stdout{codec => rubydebug}
}
pom文件
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
web项目resources下 logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--logstash日志收集端口-->
<destination>127.0.0.1:9999</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com