티스토리

Gibbs Kim's playground
검색하기

블로그 홈

Gibbs Kim's playground

mingsigi.tistory.com/m

개발 및 잡담

구독자
0
방명록 방문하기

주요 글 목록

  • [ElasticStack-33] Machinebeat test with opcua opc-ua 서버를 테스트하던 도중 해당 데이터를 ES에 적재하여야 하는 상황을 겪었다. 이때, machinebeat라는 수집도구를 사용하여 opc-ua 서버에서 ES로 적재하는 것을 알게되었다. 해당 과정에 대한 수행내역을 기록해본다. 1) opc-ua 테스트용 서버 구축 https://mingsigi.tistory.com/entry/opc-ua-test-server-via-python opc ua test server via python from time import sleep import random from opcua import Server server = Server() server.set_endpoint("opc.tcp://127.0.0.1:12345") server.register_name.. 공감수 0 댓글수 0 2021. 6. 1.
  • [ElasticStack-32] Elasticsearch (On-premise) to Elasticsearch (Cloud) through Logstash Elasticsearch Cloud로 데이터를 구축 시, 기존 ES (On-premise)에서 데이터를 가져와야하는 경우가 발생합니다. 이때 로그스태시를 활용하여 데이터를 적재할 수 있습니다. input { elasticsearch { hosts => "localhost:9200" index => "local_idx" query => '{ "query": { "match_all": {} } }' } } filter { } output { elasticsearch { cloud_id => "Deploy명:Key값" cloud_auth => "elastic:패스워드" ssl => true index => "cloud_idx" } } 기존 서버에서 구동중인 ES (On-premise)의 인덱스명을 'local.. 공감수 0 댓글수 0 2021. 3. 3.
  • [ElasticStack-31] Logstash - JDBC input SQL DB의 데이터를 Elasticsearch로 인덱싱하려고 할때 logstash conf 파일을 어떻게 설정하는지에 대한 내용을 작성합니다. == SQL DB (MariaDB) 예시 == | == 테이블 (TEST_TABLE) 예시 == PORT : 1234 | NO | ID | CODE_NAME DB Name : test User : test_user PWD : 1234 Table명 : TEST_TABLE ============ Logstash conf 파일 작성내용입니다. input { jdbc { jdbc_connection_string => "jdbc:mysql://localhost:1234/test?characterEncoding=UTF-8&serverTimezone=UTC" jdbc_dri.. 공감수 0 댓글수 0 2021. 3. 3.
  • [ElasticStack-30] Elastic Cloud 사용자 사전 Elastic Cloud에서 사전 적용을 하는 경우가 있어 관련 작업을 기록합니다. 사전 작성 (예시) stopwords.txt user_dictionary.txt synonyms.txt 해당 파일들은 dictionaries 폴더 아래에 저장이 되어 있어야 합니다. /dictionaries |---- stopwords.txt |---- user_dictionary.txt |---- synonyms.txt 파일을 Cloud에 적용하려면 다음과 같은 작업을 수행합니다. 1. dictionaries.zip 파일 생성 (위 폴더를 .zip파일화) 2. Elastic Cloud 접속 (cloud.elastic.co) 3. Deployment -> Features -> Extensions 접근 후 'Create e.. 공감수 0 댓글수 0 2021. 3. 3.
  • [ElasticStack-29] Elasticsearch 동의어 관리 방식 Elasticsearch는 Tokenizer를 통해 토큰이 모두 분리되면 다양한 토큰 필터를 적용할 수 있다.토큰 필터들 중 Synonym 필터를 적용한다면 동의어 처리에 대한 기능을 Elasticsearch를 통해 수행할 수 있다. * 동의어를 추가하는 방법1) 동의어를 mapping 설정 정보에 미리 파라미터로 등록하는 방식2) 특정 파일을 별도로 생성해서 관리하는 방식 (Ex: 동의어 사전) 첫 번째 방식은 실무에서 잘 사용되지 않는다. -> mapping 정보에서 동의어를 관리할 경우, 운영 중에는 동의어를 변경하기가 어렵기 때문 그래서 Elasticsearch에서 동의어는 주로 동의어 사전을 통해 관리된다. * 동의어 사전 만들기$ES_HOME/config/analysis/synonym.txt동.. 공감수 1 댓글수 2 2020. 9. 1.
  • [ElasticStack-28] search.max_buckets, max_result_window 사이즈 증가 Elasticsearch에서 모든 검색/집계의 기본 size는 10,000으로 설정되어 있다. 이중 집계는 bucket이라는 것을 사용하여 전체 문서를 대상으로 사용자의 기준(Ex : filter 등)에 따라 분류된 결과를 aggs 기능을 통해 표현한다. bucket의 size를 변경하려면 다음과 같은 방법들이 있다. PUT _cluster/settings { "transient": { "search.max_buckets": 20000 } } 해당 방식은 API를 활용하여 size를 조절하는 방식이다. # $ES_HOME/config/elasticsearch.yml "search.max_buckets": 20000 해당 방식은 Elasticsearch의 설정파일의 값을 조절하는 방식이다. 두 가지 방식 .. 공감수 0 댓글수 0 2020. 8. 18.
  • [ElasticStack-27] Elasticsearch msearch (with Python) Elasticsearch로 msearch를 수행할떄는 다음과 같은 패턴으로 작성을 하게 된다. GET _msearch {"index": "index1"} {"query": {"match_all": {}}} {"index": "index2"} {"query": {"match_all": {}}} {"index": "index3"} {"query": {"match_all": {}}} 참고 링크 만약 위와 같은 쿼리를 Elasticsearch-python module을 활용하여 수행하고 싶다면 다음과 같이 작성하자. from elasticsearch import Elasticsearch es = Elasticsearch() body = [ {"index": "index1"}, {"query": {"match_a.. 공감수 0 댓글수 0 2020. 7. 23.
  • [ElasticStack-26] ES data directory move 리눅스에서 ES를 사용하다가 용량 문제 등으로 ES_HOME/data의 위치를 옮겨주어야 할 경우가 생긴다. 예를 들어 data 디렉토리를 /dev/data로 옮겼다고 하였을 때 ES에서 설정해주어야 할 것을 알아보자. 1) elasticsearch.yml "path.data": /dev/data 2) /dev/data 소유자 변경 sudo chown -R player:player /dev/data => 초기 복사된 /dev/data의 소유자는 root인 경우가 대부분이다. 이 때, elasticsearch의 소유자가 player라면 위와 같은 방법으로 설정하여 같은 소유자로 설정해주면 된다. (소유자가 root일 경우 access deny나 의도치않은 ps 충돌로 elasticsearch.bootstr.. 공감수 0 댓글수 0 2020. 7. 10.
  • [ElasticStack-25] dotProduct and sigmoid in elasticsearch 엘라스틱서치는 벡터값들에 대한 내적 곱연산 (dotProduct)를 지원한다. 공식문서에서 제공하는 예제는 다음과 같다 (참고: https://www.elastic.co/guide/en/elasticsearch/reference/master/query-dsl-script-score-query.html#random-score-function) ### curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d' GET my_index/_search ### on Kibana DevTools { "query": { "script_score": { "query" : { "bool" : { "filter" : .. 공감수 0 댓글수 0 2020. 7. 1.
  • [ElasticStack-24] elasticsearch & logstash template (shard setting) 일반적으로 Logstash에서 파일을 인덱싱하게 되면 ELK 7.0 이상 버전에서는 shard 가 1의 값을 디폴트로 가진다 (6.x 이하 버전은 shard 개수 5가 디폴트) 만약 어떤 인덱스가 ES에 적재된 후, shard 개수를 변경하려면 _reindex로 새 인덱스를 생성하는 것 말고는 답이 없다. 그래서 아예, 인덱싱 전에 템플릿을 작성하여 샤드를 조정할 수 있는 기능을 ES에서 제공한다. 다음을 보자. (참고 : https://www.elastic.co/guide/en/elasticsearch/reference/6.4/indices-templates.html) # curl -X PUT "localhost:9200/_template/template_1?pretty" -H 'Content-Type.. 공감수 0 댓글수 0 2020. 7. 1.
  • [ElasticStack-23] curl -XGET ES connection 엘라스틱 서치를 실행하고 난 후, 접속 여부를 확인하기 위해 API 통신을 할 수 있다. 일반 적인 경우는 다음과 같다. curl -XGET localhost:9200 만약 추가로 X-Pack을 사용하여 유저를 생성하고 시큐리티 설정을 걸었다고 하자. (유저정보는 elastic/elastic123으로 가정) 그러면 API 명령을 다음과 같이 입력한다면 검색이 가능하다. curl --user elastic:elastic123 --insecure -XGET https://localhost:9200 무슨 차이냐 싶어서 확인해본 결과 --user 옵션으로 유저정보를 입력해주고 --insecure 옵션으로 https를 거쳐 접속을 가능하게 해주는듯 하다. 공감수 0 댓글수 0 2020. 6. 30.
  • [ElasticStack-22] Vector data indexing via Logstash & Elasticsearch 다음과 같은 vector data 파일이 있다고 하자. [ 1.2, 1.3, 1.4, 1.5 ] 일반적인 JSON 형태가 아니므로, Logstash에서 접근할만한 방법으로는 multiline codec을 생각해볼 수 있다. input{ path => "FILE_PATH" start_position => "beginning" sincedb_path => "/dev/null" codec => multiline { pattern => "^\\n" negate => true what => "previous" auto_flush_interval => 1 } } 이것을 기반으로 바로 인덱싱을 수행해보았으나 Doc가 생성되지 않았다. 그래서 쿼리로 인덱스를 생성하고, vector 타입을 가지는 필드를 매핑한 후 Lo.. 공감수 0 댓글수 0 2020. 6. 29.
  • [ElasticStack-21] _msearch on elasticsearch 서로 다른 두 인덱스를 검색하는 쿼리가 다음과 같다고 하자. (참조: https://mingsigi.tistory.com/entry/ElasticStack-16-Terms-query-Aggregation-sum-avg) GET index_A/_search { "query": { "terms": { "subject": [ "국어", "영어", "수학" ] } }, "aggs": { "aggregation_naming_1": { "filter": { "term": { "file_name": "VALUE" } }, "aggs": { "aggregation_naming_2": { "sum": { "script": "doc.score.value" } } } } } } GET index_B/_search { "qu.. 공감수 0 댓글수 0 2020. 6. 23.
  • [ElasticStack-20] ES nori setting 엘라스틱서치에서는 단어 검색 시 형태소 분석을 지원한다. 해당 기능을 사용하기 위해서는 다음과 같은 과정이 필요하다. 1) nori plugin 설치 (공식문서 : https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-nori.html) sudo bin/elasticsearch-plugin install analysis-nori 만약 지우고 싶다면 아래의 방법을 적용 sudo bin/elasticsearch-plugin remove analysis-nori 설치를 하고나면 ES를 재시작해주자. (필수) 2) Query를 사용하여 인덱스를 설정하고 nori analyzer를 setting 하자. (Kibana DevTools 기준으로.. 공감수 0 댓글수 0 2020. 6. 19.
  • [ElasticStack-19] Logstash multiline indexing 웹크롤링등을 하여 다음과 같은 패턴의 텍스트 파일이 있다고 하자. 이렇게 막 써대 ... ... 이때, HTML TAG를 제외한 내용을 엘라스틱서치에 인덱싱하고 싶다면 다음과 같이 .conf 파일을 작성해보자 ### It is operated on ELK 7.7.1 input{ file{ path => "WANTED_FILE_PATH" ## you should write your own file or dir path start_position => "beginning" sincedb_path => "/dev/null" ## above two lines, based on linux OS codec => multiline { pattern => "^\\n" negate => true what => "prev.. 공감수 1 댓글수 2 2020. 6. 19.
  • [ElasticStack-18] Result filtering of searching query aggregation을 활용하여 특정 필드만 작업(sum, avg, ...)시 "query" 결과로 aggregation에 해당하는 조건의 결과값들만 보고 싶을 때 filtering search를 활용하자. (Aggregation filtering 참고 : https://mingsigi.tistory.com/entry/ElasticStack-16-Terms-query-Aggregation-sum-avg) 위의 예시를 기준으로 "file_name" 필드에 값이 VALUE와 COMPLETE으로 구성되어 있다고 가정하자. 그러면 aggregation filter 수행 시 query에는 필터링을 걸어놓지 않았기 떄문에, "file_name"이 VALUE인 항목의 값들과 COMPLETE인 항목의 값들이 동시에 검.. 공감수 0 댓글수 0 2020. 6. 17.
  • [ElasticStack-17] File name extract in full file path Logstash 파일의 경로가 다음과 같다고 하자. /A/B/C/D/E/sample.json 이때, 특정 필드(ex: test)에 sample이라는 문자열만 삽입하고 싶으면 다음과 같은 grok 패턴을 사용하자. %{GREEDYDATA}/%{GREEDYDATA:test}\.json 공감수 0 댓글수 0 2020. 6. 15.
  • [ElasticStack-16] Terms query & Aggregation (sum, avg) Elasticsearch로 다음과 같은 항목들이 저장되어 있다고 가정하자. subject score 국어 100 영어 90 수학 80 과학 70 이 때 국여, 영어, 수학에 대한 score 합(sum)과 평균(avg)를 Query를 통하여 구하고 싶다면 다음과 같은 방식으로 표현할 수 있다. GET index/_search { "query": { "terms": { "subject": [ "국어", "영어", "수학" ] } }, "aggs": { "sum_score": { "sum": { "script": { "source": "doc.score.value" } } }, "avg_score": { "avg": { "script": { "source": "doc.score.value" } } } } } .. 공감수 0 댓글수 0 2020. 6. 12.
  • [ElasticStack-15] Logstash Grok filtering .json 파일을 엘라스틱서치에 인덱싱하면 보통 "message" 필드에 중괄호( { } ) 내부에 있던 내용들이 저장된다. 이때 "key:value" 쌍이나 기타 값들을 적절하게 분류하여 필드와 데이터로 분류하고 싶다면 filter를 사용하게 되는데 Logstash에서는 보통 Grok filter를 통해 분류 작업을 수행한다. [참고 링크] https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns elastic/logstash Logstash - transport and process your logs, events, or other data - elastic/logstash github.com https://grokdebug.her.. 공감수 0 댓글수 0 2020. 6. 11.
  • [ElasticStack-14] Logstash path.data setting 로그스태시로 데이터를 인덱싱할때 주로 다음과 같은 명령어를 사용한다. ## If file name of .conf is test.conf, typing like below. LOGSTASH_HOME/bin> ./logstash -f test.conf 이때 다음과 같은 에러가 발생할 수 있다. > Logstash could not be started because there is already another instance using the configured data directly. If you wish to run multiple instances, you must change the "path.data" setting. 의미는 대략, 데이터를 인덱싱하기에 이미 다른 instance가 사용중이라는 건.. 공감수 0 댓글수 0 2020. 6. 11.
  • [ElasticStack-13] ELK operating on background (on Linux) elasticsearch, logstash, kibana를 설치하여 실행할 때는 일반적으로 커맨드를 통한 수동접속(manual connection)을 기본으로 한다. 하지만, 상황상 백그라운드에서 계속 실행을 시켜야 하는 경우가 있는데 다음과 같은 명령어를 통해 해결가능하다. ## Elasticsearch 실행하기 nohup $ES_HOME/bin/elasticsearch & ## Logstash 실행하기 nohup $LOGSTASH_HOME/bin/logstash -f test.conf & ## Kibana 실행하기 nohup $KIBANA_HOME/bin/kibana & # 실행 프로세스 확인하기 ps -ef | grep SOMETHING ### options on SOMETHING ''' 1) no.. 공감수 0 댓글수 0 2020. 6. 9.
  • [ElasticStack-12] jdk download with wget command on Linux ELK에서, 특히 Logstash를 사용하려고 하면 jdk가 필요하다. wget을 사용하여 JDK를 다운로드하는 방법을 알아보자. wget 'https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz' - ~/apps/openjdk-11.0.2_linux-x64_bin.tar.gz Java Path 설정 공감수 0 댓글수 0 2020. 6. 5.
  • [ElasticStack-11] Elasticsearch 외부 접속 on (Windows & Linux) 보통 ELK는 localhost:port 패턴으로 사용을 하지만 외부접속이 가능하게 하고 싶을때가 있다. 다음 파일들을 설정해주자 # version 7.6.2 # elasticsearch.yml network.host: 0.0.0.0 discovery.seed_hosts: ["0.0.0.0", "0.0.0.0"] # version 7.6.2 # kibana.yml server.host: "0.0.0.0" elasticsearch.hosts: ["USER_IP:9200"] 추가로 heap memory 관련하여 오류 메시지가 출력된다면 다음 설정을 확인하자 # elasticsearch/config/jvm.options -Xms1g -Xms1g ## 를 변경 Ex) 2g, 4g ... (Linux) max v.. 공감수 0 댓글수 0 2020. 6. 4.
  • [ElasticStack-10] Data Snapshot & Restore ELK 6.4.1 에서 ELK 7.6.2 로의 데이터 이동을 snapshot 기능을 활용하여 수행한 과정을 기록합니다. 기존에 데이터가 저장된 ELK 버전 정보 더보기 Elasticsearch 6.4.1 || Logstash 6.4.1 || Kibana 6.4.1 저장된 데이터 Sample (CSV file) Kibana 6.4.1에 등록된 IndexPatterns : csv2el_seoulmetro I. Snapshot 1) Kibana 6.4.1에서 Snapshot 수행을 위한 fs(file system) 경로(repository) 설정 (in DevTools) POST /_snapshot/my_backup { "type": "fs", "settings": { "location": "path.repo.. 공감수 0 댓글수 0 2020. 6. 3.
  • [ElasticStack-9] CSV file 한글 내용 logstash 업로드 (convert utf-8 encoding) 윈도우에서 CSV 파일의 내용을 한글로 작성하면 EUC-KR 인코딩으로 파일이 저장된다. Logstash는 CSV 파일을 읽을 때, UTF-8 인코딩으로 reading을 수행한다. 따라서, encoding 전처리를 하지 않으면 윈도우에서 저장한 CSV의 내용이 Logstash를 통해 업로드 할 시, 모두 깨져서 출력된다. ===== How to solve this problem? ===== 1) 윈도우에서 저장한 CSV 파일을 UTF-8로 인코딩하기 위하여 open -> 이때 여러 방법으로 인코딩할 수 있겠지만 여기서는 Microsoft Visual Studio Code를 사용하였다. 2) Visual Studio Code에서 1)의 CSV 파일을 보면 내용이 깨져서 나온다 -> 우측 하단에 encodi.. 공감수 0 댓글수 0 2020. 6. 3.
  • [ElasticStack-8] Elasticsearch indexing json through Logstash 서울지하철 데이터(JSON)를 가지고 로그스태시(Logstash)를 사용하여 엘라스틱서치(Elasticsearch)에 인덱싱한 과정을 기록합니다. (Version based 7.6.2) ### json 파일의 key-value pair status example { "DESCRIPTION" : {"STN_PHONE":"전화번호","STN_LINE":"호선""STN_NM":"역명","STN_ZIP_CODE":"우편번호","STN_ADDR":"지번주소","STN_IDX":"연번","STN_ROAD_ADDR":"도로명주소"}, "DATA" : [ {"stn_zip_code":"157-857","stn_nm":"방화역","stn_line":"5","stn_phone":"02-6311-5101","stn_road.. 공감수 0 댓글수 0 2020. 5. 29.
  • [ElasticStack-7] Dense Vector in Elasticsearch Elasticsearch에서는 vector 값을 직접 입력할 수 있다. dense_vector로 불리는 이 필드는 float 타입의 데이터를 저장 가능하다. (A dense_vector field stores dense vectors of float values.) 필드는 차원 값을 가지는데 2048을 초과할 수 없다. (The maximum number of dimensions that can be in a vector should not exceed 2048. A dense_vector field is a single-valued field.) Example in Dev tools ## Create index and mapping PUT dense_vector_test_index { "mappings.. 공감수 0 댓글수 0 2020. 4. 29.
  • [ElasticStack-6] 정규표현식(regex)과 Logstash 정규표현식 : 특정한 규칙을 가진 문자열을 집합을 표현하는데 사용하는 형식 언어 정규 표현식 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 노랑색 강조 부분은 다음 정규식을 사용했을 때 매치된 것이다. 정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp[1] 또는 regex, rational expression)[2][3] 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 ko.wikipedia.org Logstash에서는 grok 이라는 이름의 filter 기능으로 정규표현식이 주로 사용된다 .. 공감수 0 댓글수 0 2020. 4. 23.
  • [ElasticStack-5] .csv file insert to Elasticsearch via Logstash.conf Logstash를 사용하여 파일(대표적으로 .csv)을 Elasticsearch로 업로드할때 사용하는 대표적인 파일명은 다음과 같은 패턴을 가진다 -> logstash2el.conf .conf 파일은 대표적으로 input, filter, output 을 사용하여 raw data를 입력(input)하고 정제(filter)하며, ES로 파일을 전송(output)한다. =================== .conf Example ==================== ## This is operated in ELK 7.6.2 input { file { ## Basically, Windows' path like as C:\Users\~ ## In Logstash, Windows also follow linux s.. 공감수 0 댓글수 0 2020. 4. 6.
  • [ElasticStack-4] Windows PowerShell execution policy (feat. Filebeat) PowerShell execution 정책의 기본값은 다음과 같다. Default Restricted for Windows clients. RemoteSigned for Windows server. 'install-service-filebeat.ps1'을 PowerShell로 실행 시, 오류가 발생한다면, 기본적으로는 다음과 같은 명령어를 사용하면 권한 할당이 정상적으로 이루어져 .ps1 스크립트를 실행 가능하다. > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 나머지 Policy 정책을 보고 싶다면 다음 링크를 참고하면 된다. MicrosoftDocs about_Execution_Policies - PowerShell About Execution Polici.. 공감수 0 댓글수 0 2020. 4. 6.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.