2019独角兽企业重金招聘Python工程师标准>>>
主要参考 http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
错误1 max virtual memory areas vm.maxmapcount [65530] is too low
解决1 sudo sysctl -w vm.max_map_count=262144
错误2
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
解决2 vi /etc/security/limit.conf 添加以下2行,然后重新登录 ulimit -n 检查设置是否成功。
* solf nofile 65536
* hard nofile 65536
错误3 不能从其他机器访问
解决3 修改 config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0或者机器的ip,然后重新启动。
安装中文分词插件
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.1.1/elasticsearch-analysis-ik-6.1.1.zip
elasticsearch 默认提供的英文分词器名称为 analyzer ,上面自己安装的分词器名称为 ik_max_word,创建index的时候,字段如果为中文需要自己指定 分词器。
例如:
curl -H 'Content-type':'application/json' -X PUT 'localhost:9200/accounts' -d '
{
"mappings": {
"person": {
"properties": {
"user": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"title": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"desc": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}
}
}'
上面创建了一个名称为accouts的index ,名称为 person 的type,有三个字段 每个字段类型都为 text 分词器都只重新指定的。 ik_max_work
$ curl -H 'Content-type':'application/json' -X PUT 'localhost:9200/accounts/person/1' -d '
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理"
}'
//算了,参考官网,采用 yum在线安装了, 方便。
//用mongodb 的 日志来试试,问题来了, conf 咋写? 没有头绪
用了 filebeat,配置参考
https://www.elastic.co/guide/en/logstash/6.1/advanced-pipeline.html
最开始应该先看看能不能连通
input {
beats {
port => 5044
}
}
output {
stdout {}
}
打算用mongodb的日志来试试
参考这篇,
http://soft.dog/2016/02/15/logstash-mongodb-slow-log/
看来最重要的是 filter 部分,合理的分隔出想要的字段
以下配置勉强能用,但是遇到 mongodb 打印 聚合操作的日志时,又不匹配了。。。,
input {
beats {
port => 5044
host => "192.168.0.160"
client_inactivity_timeout => 300
type=> mongodblog
}
}
filter {
grok {
match => ["message","%{TIMESTAMP_ISO8601:timestamp}\s+%{MONGO3_SEVERITY:severity}\s+%{MONGO3_COMPONENT:component}\s+(?:\[%{DATA:context}\])?\s+%{GREEDYDATA:body}"]
}
if [component] =~ "COMMAND" {
grok {
match => ["body","%{WORD:command_type}\s+%{DATA:db_name}\s+\w+\:\s+%{GREEDYDATA:command}%{INT:spend_time}ms$"]
}
}
date {
match => [ "timestamp", "UNIX", "YYYY-MM-dd HH:mm:ss", "ISO8601"]
remove_field => [ "timestamp" ]
}
}
output {
elasticsearch {
sniffing => true
manage_template => false
template_overwrite => true
index => "mongodblog"
hosts => [ "localhost:9200" ]
document_type => "mongodblog"
}
}
自己不太会写,都是百度的。